This question already has answers here:
Why don't Java's +=, -=, *=, /= compound assignment operators require casting?
                                
                                    (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