请问为什么以下类型转换会导致编译时错误:
Long l = (Long)Math.pow(5,2);
但是为什么不使用以下方式:
long l = (long)Math.pow(5,2);
Math.pow(5,2)
返回的是一个 double
类型的值,可以强制转换为 long
类型,但不能强制转换为 Long
类型。
但是,由于 自动装箱 可以在 long
和 Long
之间进行转换,因此这也是可行的。
Long l = (long)Math.pow(5,2);
总之,你可以将 double --> long
和 long --> Long
转换,但不能将 double --> Long
转换。
你不能直接将基本数据类型(例如 double
)转换为对象。这不是Java的工作方式。有些情况下,语言可以自动为你应用适当的对象创建,例如函数调用参数。
因为原始类型在所有方面都不是对象,即使Java添加了一些解决方法(例如这些类型的隐式拆箱)。
您可以通过各种方式来解决它,例如:
Long l3 = ((Double)Math.pow(5, 2)).longValue();
这能够正常工作是因为Java具有以下能力:
int
转换到 long
Int
转换到 Long
long
转换到 Long