为避免混淆,我正在查找RULE/JLS条目.
-
我不是问为什么
Double -> int
个会失败,我是问它失败的way -
我知道有损失的转换,正如我在我的问题中提到的-我不是问
double -> int
个%之间的数据丢失 -
我不是在要求某人对开发人员为什么以这种方式设计它进行"最佳猜测"
我的问题是,为什么Integer -> double
个执行转换(取消装箱和加宽),而Double -> int
个不执行转换(甚至不取消装箱)
我正在寻找提到Reference -> primitive
转换不一致的JLS条目,其中取消装箱在一种情况下发生,但在另一种情况下不发生.
此Integer -> double
个转换编译时没有错误
double d = Integer.valueOf(1);
这意味着会发生以下情况:
-
Integer
等于unboxed到int
-
int
的值从int -> double
个到widening primitive conversion
Integer
未打包.然后扩大未装箱的值.这提供了与int -> double
个相同的行为
这产生了这样的假设,即Double -> int
个也将取消装箱,给出与double -> int
个相同的行为
以获取代码
int i = Double.valueOf(1);
我预计会出现错误消息
从双精度到整型的有损转换
假设Double
被取消装箱,我们应该观察到与double -> int
个相同的行为
相反,我们会收到一个输入错误
无法将双精度型转换为整型
这种行为背后的解释是什么?
为什么在Integer -> double
个之间发生取消装箱,而在Double -> int
个之间没有取消装箱?
为什么这些是一致的:
-
Integer -> double
个 -
int -> double
个
但这些并不是:
-
Double -> int
个 -
double -> int
个