Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么将基元类型强制转换为引用类型会导致编译错误?_Java_Casting_Primitive Types_Reference Type - Fatal编程技术网

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例失败。