java cast confusion

时间:2010-03-12 19:20:58

标签: java casting

有人可以告诉我为什么以下转换导致编译时错误:

Long l = (Long)Math.pow(5,2);

但为什么不是以下内容:

long l = (long)Math.pow(5,2);

3 个答案:

答案 0 :(得分:10)

Math.pow(5,2)double,可以投放到long。它无法转换为Long

这可以正常工作,感谢autoboxinglongLong之间转换:

Long l = (long)Math.pow(5,2);

总结一下,您可以转换double --> longlong --> Long,但不转换double --> Long

答案 1 :(得分:4)

您不能将基本类型(如double)直接转换为对象。这不是Java的工作方式。在某些情况下,语言可以为您应用适当的对象创建,例如函数调用参数。

答案 2 :(得分:1)

因为如果java添加了一些变通方法(比如这些类型的隐式拆箱),原始类型对所有效果都不是对象。

你可以通过各种方式单独使用它,例如:

Long l3 = ((Double)Math.pow(5, 2)).longValue();

这是有效的,因为Java能够:

  • 当您使用普通类型声明引用它们时,从原始类型隐式转换为另一个类型,例如:intlong
  • 从盒装类型隐式转换为另一个类型,例如。 IntLong
  • 在盒装和非盒装类型相同时切换,例如longLong