为什么';Java是否支持强制和自动装箱?

为什么';Java是否支持强制和自动装箱?,java,autoboxing,Java,Autoboxing,可能重复: 例如Integer foo=4和Long foo=4L都可以编译,但Long foo=4不能编译。这有什么道理吗 Long foo = 4; 方法:将值为4的int分配给类Long的对象。它将尝试使用自动装箱,但失败了,因为自动装箱仅适用于相应的原语。它可以通过两种方式固定: Long foo = (long) 4; Long foo = 4L; 在第一种情况下,将int4转换为long4。在第二种情况下,您提供了一个长的 回答这个问题:Java不支持自动转换,而且在键入方面非

可能重复:

例如
Integer foo=4
Long foo=4L
都可以编译,但
Long foo=4
不能编译。这有什么道理吗

Long foo = 4;
方法:将值为4的
int
分配给类
Long
的对象。它将尝试使用自动装箱,但失败了,因为自动装箱仅适用于相应的原语。它可以通过两种方式固定:

Long foo = (long) 4;
Long foo = 4L;
在第一种情况下,将
int
4转换为
long
4。在第二种情况下,您提供了一个长的


回答这个问题:Java不支持自动转换,而且在键入方面非常严格,这可能就是它不支持自动转换的原因。

好问题。我想知道这是否会引起一些歧义。(+1)从技术上讲,
Long foo=4
无法在编译时进行计算。我不介意您是否希望将此作为重复项关闭,但是否删除一条提示此/不是/重复项的注释?我特别想为这种行为找一个理由,例如,在提到NPE时会引入模棱两可的案例。@hertzsprung如果它不是以重复的形式关闭的,它仍然会以非建设性的方式关闭。StackOverflow不是关于促进讨论而不是回答的问题。JLS定义,“int到Long”不在列表中。“浮动到双精度”如
Double d=1.5f
也不起作用。只是没有指定自动加宽+装箱。要求程序员强制转换然后指定所有可能的加宽/变窄+装箱/拆箱情况要容易得多。