为什么将原始类型转换为引用类型会产生编译错误?
Why does casting a primitive type to a reference type is giving compilation error?
我想知道为什么将原始数据类型(例如int
)转换为引用类型(例如Long
)无法编译?
BinaryOperator<Long> add = (x, y) -> x + y;
System.out.println(add.apply((Long)8, (Long)5)); //this line does not compile
System.out.println(add.apply((long)8, (long)5)); // this line does compile
我很乐意得到一些详细的答案。谢谢。
因为这个
Long l = 1;
表示将一个int
(不带浮点数的字面量为int
)赋值给一个Object
,这里是Long
.
Java 5 中引入的自动装箱功能不允许从 int
装箱到 Integer
以外的其他东西。所以 Long
作为目标类型是不可接受的,但这个是:
Integer i = 1;
在您的工作示例中,您将 int 转换为 long :(long)8
。
所以编译器可以完美地将 long
装箱到 Long
.
long
是原始数据类型,但 Long
是(包装器)class。
以下应该有效。
System.out.println(add.apply(Long.valueOf(8), Long.valueOf(5)));
我想知道为什么将原始数据类型(例如int
)转换为引用类型(例如Long
)无法编译?
BinaryOperator<Long> add = (x, y) -> x + y;
System.out.println(add.apply((Long)8, (Long)5)); //this line does not compile
System.out.println(add.apply((long)8, (long)5)); // this line does compile
我很乐意得到一些详细的答案。谢谢。
因为这个
Long l = 1;
表示将一个int
(不带浮点数的字面量为int
)赋值给一个Object
,这里是Long
.
Java 5 中引入的自动装箱功能不允许从 int
装箱到 Integer
以外的其他东西。所以 Long
作为目标类型是不可接受的,但这个是:
Integer i = 1;
在您的工作示例中,您将 int 转换为 long :(long)8
。
所以编译器可以完美地将 long
装箱到 Long
.
long
是原始数据类型,但 Long
是(包装器)class。
以下应该有效。
System.out.println(add.apply(Long.valueOf(8), Long.valueOf(5)));