Java 为什么将基元类型强制转换为引用类型会导致编译错误?
我想知道为什么将原始数据类型(Java 为什么将基元类型强制转换为引用类型会导致编译错误?,java,casting,primitive-types,reference-type,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 Bi
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
BinaryOperator add=(x,y)->x+y;
System.out.println(add.apply((长)8,(长)5))//这一行不编译
System.out.println(add.apply((长)8,(长)5));//这一行不编译
我很乐意得到一些详细的答案。谢谢。因为
Long l = 1;
表示将int
(不带浮动部分的文字数字为int
)分配给对象,此处为长
Java5中引入的自动装箱功能不允许从int
装箱到整数以外的其他内容。因此,Long
作为目标类型是不可接受的,但这个类型是:
Integer i = 1;
在工作示例中,将int转换为long:(long)8
因此编译器可以完美地将long
装箱到long
,因为
Long l = 1;
表示将int
(不带浮动部分的文字数字为int
)分配给对象,此处为长
Java5中引入的自动装箱功能不允许从int
装箱到整数以外的其他内容。因此,Long
作为目标类型是不可接受的,但这个类型是:
Integer i = 1;
在工作示例中,将int转换为long:(long)8
因此,编译器可以完美地将long
装箱到long
,long
是一个原始数据类型,而long
是一个(包装器)类
以下几点应该行得通
System.out.println(add.apply(Long.valueOf(8), Long.valueOf(5)));
long
是一种基本数据类型,但long
是一个(包装器)类
以下几点应该行得通
System.out.println(add.apply(Long.valueOf(8), Long.valueOf(5)));
(长)8l是否编译?这里有一个更进一步的[.Do(Long)8l
编译吗?这里有一个更进一步的[.虽然在int
到Long
的情况下,答案是正确的,但它不是100%正确的,因为自动装箱将很高兴地从编译时常量int
转换为Short
。我的问题涉及到自动装箱前阶段,即强制转换。仍然没有真正理解编译器为什么拒绝is cast操作:(长)5@biziclop我不会指定这一点,因为它是一个角大小写,但对于短文本,您是对的。您不能像您那样将原语强制转换为引用。5
是一个原语,将其强制转换为Long
应首先遵守自动装箱规则(这里的装箱部分:原语到对象)。在这种特定情况下,5
(一个int
)无法装箱到Long
。仅此而已。@davidxxx非常感谢您。虽然在int
到Long
的情况下,答案是正确的,但它不是100%正确的,因为自动装箱将很高兴地从编译时常量int
转换为Short
。例如,我的问题涉及到预自动装箱阶段,即t是强制转换。仍然没有真正理解编译器拒绝此强制转换操作的原因:(Long)5@biziclop我不会指定这一点,因为这是一个角大小写,但对于短文本,您是对的。您不能像您那样将原语强制转换为引用。5
是一个原语,将其强制转换为Long
应首先遵守自动装箱规则(这里是装箱部分:原语到对象)。在这种特定情况下,5
(一个int
)不能被装箱到长的。仅此而已。@davidxxx非常感谢您的回复。我不是在问我的问题的解决方案。我想知道为什么强制转换操作(长)5例失败。谢谢你的回复。我不是在问我的问题的解决方案。我想知道为什么铸造操作(长)5例失败。