对字节添加和赋值的有趣观察

kos*_*osa 4 java casting

今天在帮助某人的过程中,我遇到了一个有趣的问题,我无法理解其中的原因.使用+ =时我们不需要显式转换,但是当我们使用i + i时,我们需要显式转换.找不到确切的原因.任何输入将不胜感激.

public class Test{
       byte c = 2;
       byte d = 5;

       public  void test(String args[])
       {
           c += 2;
           d = (byte) (d + 3);   
       }
    }
Run Code Online (Sandbox Code Playgroud)

tem*_*def 8

定义Java,使得+ =和其他复合赋值运算符自动将结果转换为要更新的变量的类型.因此,使用+ =时不需要强制转换,但只需使用普通运算符即可.您可以在http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.26.2的Java语言规范中看到这一点.

具体来说,表达方式

a op= b
Run Code Online (Sandbox Code Playgroud)

相当于

(a = (type of a)((a) op (b));
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!