在Java中,以下行不显示编译错误
long a = 10;
但以下行会引发编译错误“不兼容的类型”
Long a = 10;
我知道以上声明应写为
Long a = 10L;
但是我想了解为什么JDK设计人员决定不做类型转换,然后自动装箱,只做其中之一?
答案 0 :(得分:1)
这是默认行为。要使用scale()
常量,只需在数字末尾添加“ l”:
Long
答案 1 :(得分:0)
第一个示例没有给出编译错误,因为long
类型比int
宽。您可以像这样进行分配:
double -> float -> long -> int -> short -> byte
第二个示例需要自动装箱,但是Java只能将原始类型自动装箱到相应的包装器。例如。 long
至Long
,int
至Integer
,...
这就是为什么要区分不同类型的原因,可以添加字母:
5L
-长,5d
-双精度,5f
-浮动
有关更多详细信息,请参见此处Java: Why can't I cast int to Long