java – 无法使用表达式增加字节值但使用增量运算符

前端之家收集整理的这篇文章主要介绍了java – 无法使用表达式增加字节值但使用增量运算符前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > why byte += 1 compile but byte = byte + 1 not?8个
为什么
以下内容有效
byte i=0;
i++;

其中以下内容无效

byte i=0;
i=i+1;

会是什么原因?

我知道在i 1的情况下,整个值显式递增1(这将是int值),因此将发生编译问题,但是在i的情况下它会做同样但没有得到任何错误.

解决方法

每当您在两个不同类型的操作数之间执行二进制操作时,其中一个操作数将被提升为更高类型.然后操作的结果就是那种类型.

因此,在您的情况下,字节类型a首先被提升为int,因为1是int类型.然后在加法运算之后,结果是int类型.现在,由于您无法为一个字节分配int,因此需要进行类型转换以删除编译器错误

byte a = 2;
a = a + 1;   // Error: Cannot assign an int value to byte
a = (byte)(a + 1);  // OK

现在,在复合赋值运算符的情况下,类型转换是为您隐式完成的.表达方式:

a += 1

内部转换为:

a = (byte)(a + 1);

这在JLS-§15.26.2 Compound Assignment Operator:中指定

形式E1 op = E2的复合赋值表达式等效于E1 =(T)((E1)op(E2)),其中T是E1的类型,除了E1仅被评估一次.

前缀增量运算符和后缀增量运算符的情况类似.

根据JLS – §15.15 Unary Operators:

前缀增量表达式的类型是变量的类型.

原文链接:https://www.f2er.com/java/129536.html

猜你在找的Java相关文章