我想知道为什么将原始数据类型(例如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
我很乐意得到一些详细的答案。谢谢。
答案 0 :(得分:4)
因为这个
Long l = 1;
表示将int
(不包含浮动部分的文字编号为int
)分配给Object
,此处为Long
。
Java 5中引入的自动装箱功能不允许从int
开箱到除Integer
之外的其他内容。所以Long
不能作为目标类型接受,但这个是:
Integer i = 1;
在您的工作示例中,您将int转换为long:(long)8
因此,编译器可以完美地将long
添加到Long
。
答案 1 :(得分:0)
long
是原始数据类型,但Long
是(包装)类。
以下情况应该有效。
System.out.println(add.apply(Long.valueOf(8), Long.valueOf(5)));