这个
Integer -> double
转换编译没有错误
double d = Integer.valueOf(1);
这意味着发生以下情况:
Integer
是 未装箱 到 int
int
值从int -> double
经历扩大原始转换
Integer
已拆箱。然后扩大未装箱的值。这提供了与 int -> double
相同的行为
创建了假设
Double -> int
也将拆箱,给出与 double -> int
相同的行为
获取代码
int i = Double.valueOf(1);
我希望看到错误消息
从 double 到 int 的有损转换
假设
Double
被拆箱,我们应该观察到与 double -> int
相同的行为
相反,我们收到了输入错误
无法将 Double 转换为 int
此行为背后的解释是什么?
为什么
Integer -> double
之间发生拆箱,而Double -> int
之间不发生拆箱?
为什么这些是一致的:
Integer -> double
int -> double
但这些不是:
Double -> int
double -> int
Double
只有两种 valueOf
方法:一种用于 String
输入,另一种用于 double
输入。
因此,当您编写
Double.valueOf(1)
时,其中 1
显然是 int
,方法签名意味着您的值 1
从 int
升级为 double
,然后该方法运行。所以你要求 int = double
而 Java 会说“那不适合,所以:不”。