这个问题在这里已有答案:
在Java中,以下行不会出现编译错误
long a = 10;
但是以下行抛出编译错误“不兼容类型”
Long a = 10;
我知道上面的陈述应该写成
Long a = 10L;
但我想理解为什么JDK设计师决定不进行类型转换然后自动装箱而只做其中一个?
这是默认行为。要使用Long
常量,只需在数字的末尾添加“l”:
Long number = 10l;
第一个例子没有给出编译错误,因为long
类型比int
宽。您可以执行以下任务:
double -> float -> long -> int -> short -> byte
第二个示例需要自动装箱,但java只能将原始类型自动装箱到相应的包装器。例如。 long
到Long
,int
到Integer
,......
这就是为什么要区分不同的类型,你可以添加字母:
5L
- long,5d
- double,5f
- float
有关详细信息,请参阅此处Java: Why can't I cast int to Long