今天在帮助某人的过程中,我遇到了一个有趣的问题,我无法理解其中的原因.使用+ =时我们不需要显式转换,但是当我们使用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)
定义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)
希望这可以帮助!