This question already has answers here:
Why don't Java's +=, -=, *=, /= compound assignment operators require casting?
(11个答案)
4年前关闭。
我编写了两个版本的Java代码以将char变量增加1:
版本1:
版本2:
令我惊讶的是,第二个版本可以编译并成功运行,但是第一个版本显示错误,该错误指示类型不兼容:从int到char的有损转换。他们为什么不同?
请参见JLS section 15.26.2(复合运算符):
(11个答案)
4年前关闭。
我编写了两个版本的Java代码以将char变量增加1:
版本1:
char c = 'a';
c = c + 1;
版本2:
char c = 'a';
c += 1;
令我惊讶的是,第二个版本可以编译并成功运行,但是第一个版本显示错误,该错误指示类型不兼容:从int到char的有损转换。他们为什么不同?
最佳答案
第二个版本涉及强制转换,等效于:
c = (char) (c + 1);
请参见JLS section 15.26.2(复合运算符):
E1 op= E2
形式的复合赋值表达式等效于E1 = (T) ((E1) op (E2))
,其中T是E1的类型,只是E1仅被评估一次。关于java - 将char变量增加一个int值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35374896/
10-14 10:40