为什么Java不支持强制类型转换和自动装箱?

6

2
好问题。我想知道那是否会导致一些歧义。(+1) - NPE
1
我不介意如果你想将这个问题关闭为重复,但是删除一个评论并建议说这不是重复的?我特别在寻找对这种行为的理由,例如可能会引入NPE提到的模糊情况。 - hertzsprung
@hertzsprung,希望我的评论被自动删除了,因为它包含了可能重复的链接。我投票支持重新开放它,但现在可能太晚了,无法获得更多的投票和更详细的答案。 - Pshemo
1
如果它没有被关闭为重复,它仍然会受到“不具建设性”的关闭。StackOverflow只关注回答问题而非促进讨论的问题。 - Marko Topolnik
1
JLS定义了9种装箱转换,但“int到Long”的转换不在列表中。像Double d = 1.5f这样的“float到Double”也行不通。自动扩展+装箱并没有被明确定义。要求程序员进行强制类型转换比指定所有可能的扩展/缩小+装箱/拆箱情况要容易得多。 - Andreas Dolk
显示剩余3条评论
1个回答

5
Long foo = 4;

意思是:将值为4的int赋给Long类对象。它会尝试使用自动装箱来完成这个操作,但失败了,因为自动装箱只适用于相应的基本类型。可以有两种方式解决:

Long foo = (long) 4;
Long foo = 4L;

在第一种情况下,您将int 4转换为long 4。而在第二种情况下,您提供了一个长整型数字。
回答这个问题:Java不支持自动类型转换,并且非常严格,这可能是为什么它不会自动支持的原因。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接