今天在帮助某人的过程中,我遇到了一个有趣的问题,我无法理解其中的原因。 使用+ =时我们不需要显式转换,但是当我们使用i + i时,我们需要显式转换。找不到确切的原因。任何意见都将不胜感激。
public class Test{
byte c = 2;
byte d = 5;
public void test(String args[])
{
c += 2;
d = (byte) (d + 3);
}
}
答案 0 :(得分:8)
Java定义为+ =,其他复合赋值运算符自动将结果转换为要更新的变量的类型。因此,使用+ =时不需要强制转换,但只需使用普通运算符即可。您可以在http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.26.2
的Java语言规范中看到这一点具体来说,表达方式
a op= b
相当于
(a = (type of a)((a) op (b));
希望这有帮助!
答案 1 :(得分:1)
来自Java Language Spec, Chapter 15:
[..]二进制操作的结果(注意:
(c+2)
在我们的示例中,导致int
类型值)被转换为类型左侧变量(注意:在我们的示例中为byte
),受到值集转换(第5.113节)到相应的标准值集(不是扩展指数值) set),转换结果存储在变量中。