有人可以告诉我为什么以下转换导致编译时错误:
Long l = (Long)Math.pow(5,2);
但为什么不是以下内容:
long l = (long)Math.pow(5,2);
答案 0 :(得分:10)
Math.pow(5,2)
是double
,可以投放到long
。它无法转换为Long
。
这可以正常工作,感谢autoboxing在long
和Long
之间转换:
Long l = (long)Math.pow(5,2);
总结一下,您可以转换double --> long
和long --> Long
,但不转换double --> Long
答案 1 :(得分:4)
您不能将基本类型(如double
)直接转换为对象。这不是Java的工作方式。在某些情况下,语言可以为您应用适当的对象创建,例如函数调用参数。
答案 2 :(得分:1)
因为如果java添加了一些变通方法(比如这些类型的隐式拆箱),原始类型对所有效果都不是对象。
你可以通过各种方式单独使用它,例如:
Long l3 = ((Double)Math.pow(5, 2)).longValue();
这是有效的,因为Java能够:
int
到long
Int
至Long
long
到Long