Java 相等(=)。为什么原语加宽有效而包装无效?

Java 相等(=)。为什么原语加宽有效而包装无效?,java,type-conversion,wrapper,primitive,boxing,Java,Type Conversion,Wrapper,Primitive,Boxing,我注意到了令人惊讶的行为 代码1: 这是一个有效的字符串,代码编译的结果对我来说很好 Type mismatch: cannot convert from int to Double 代码2: 这是无效的字符串,代码无法编译-这对我来说是意外的结果 Type mismatch: cannot convert from int to Double 为什么原语加宽对包装器有效?不是吗?第一种情况:原语发生时,int加倍 第二种情况:您需要在那里装箱和拆箱,并且RHS应该是对应包装器的精确原语 所

我注意到了令人惊讶的行为

代码1: 这是一个有效的字符串,代码编译的结果对我来说很好

Type mismatch: cannot convert from int to Double
代码2: 这是无效的字符串,代码无法编译-这对我来说是意外的结果

Type mismatch: cannot convert from int to Double

为什么原语加宽对包装器有效?不是吗?

第一种情况:原语发生时,int加倍

第二种情况:您需要在那里装箱和拆箱,并且RHS应该是对应包装器的精确原语

所以,您需要告诉编译器,右边的值是双精度的


加宽在本例中不起作用,因为您的语句需要从int加宽到double,然后自动装箱到double,才能成为合法的赋值。Java将自动为您执行一项或另一项操作,但不能同时执行这两项操作。

因为要让后者工作,您需要先执行加宽操作,然后执行长方体操作。但加宽并不是为对象定义的,只是为基本体定义的

让它工作的唯一方法是首先加宽基元类型,类似于int->double->double,但这需要编译器强制加宽,因为它意识到结果被分配给了一个双特定对象,如果是之后,则只分配给box,这没有多大意义。

我发现决策:

加宽->装箱-无效的转换链

装箱->宽边-有效的转换链

此代码:

 Object  d=1;
 System.out.println(d.getClass());
返回

class java.lang.Integer

这里的有效字符串double dPrimitive=1的平均值是多少//有效字符串我尝试将int转换为双精度-而不是副精度-versa@BrajOP表示值:@sᴜʀᴇsʜᴀᴛᴛᴀ 字符串在哪里?我认为字符串OP表示代码行
Double dWrapper = 1 ; // invalid  
 Object  d=1;
 System.out.println(d.getClass());
class java.lang.Integer