gpt4 book ai didi

java - 复合分配的自动(取消)装箱失败

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:51:02 25 4
gpt4 key购买 nike

由于复合赋值和递增/递减运算符中的隐式转换,以下编译:

byte b = 0;
++b; b++; --b; b--;
b += b -= b *= b /= b %= b;
b <<= b >>= b >>>= b;
b |= b &= b ^= b;

并且由于自动装箱和自动拆箱,以下内容也可以编译:

Integer ii = 0;
++ii; ii++; --ii; ii--;
ii += ii -= ii *= ii /= ii %= ii;
ii <<= ii >>= ii >>>= ii;
ii |= ii &= ii ^= ii;

然而,以下代码片段的最后一行给出了编译时错误:

Byte bb = 0;
++bb; bb++; --bb; bb--; // ... okay so far!
bb += bb; // DOESN'T COMPILE!!!
// "The operator += is undefined for the argument type(s) Byte, byte"

谁能帮我弄清楚这里发生了什么? byte b 版本编译得很好,所以 Byte bb 不应该效仿并根据需要进行适当的装箱和拆箱吗?


附加问题

那么有没有办法让复合赋值运算符与左侧的 ByteCharacterShort 一起工作,或者是对于这些类型,它们简直是非法的(!!!)

最佳答案

§ 5.1.7 (Boxing)标准说:

From type boolean to type Boolean
From type byte to type Byte
From type char to type Character
From type short to type Short
From type int to type Integer
From type long to type Long
From type float to type Float
From type double to type Double

注意没有int to Byte。当您执行 bb + bb 时,它会转换为 int + int,不会装回 Byte。对于 byte 版本,int + int 直接转换回 byte(缩小原始转换范围,§ 5.1.3),因此它是允许的。

关于java - 复合分配的自动(取消)装箱失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2704540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com