微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.jb51.cc/java/129536.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐