为什么将基本类型转换为引用类型会产生编译错误?

时间:2018-04-05 14:30:46

标签: java casting primitive-types reference-type

我想知道为什么将原始数据类型(例如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

我很乐意得到一些详细的答案。谢谢。

2 个答案:

答案 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)));