java为什么将基元类型强制转换为引用类型会导致编译错误?
我想知道为什么将原始数据类型(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
我很乐意得到一些详细的答案。多谢各位
# 1 楼答案
long
是一个基本数据类型,但Long
是一个(包装器)类以下几点应该有用
# 2 楼答案
因为这个
意味着将一个
int
(没有浮动部分的文字数是int
)分配给一个Object
,这里是一个Long
Java 5中引入的自动装箱功能不允许从
int
装箱到Integer
以外的其他内容。所以Long
不能被接受为目标类型,但这个类型是:在工作示例中,将int转换为long:
(long)8
因此,编译器可以完美地将
long
框到Long