首先看一段代码:
public static void main(String[] args) {
byte num = 1;
num = num + 1;
num += 1;
System.out.println(num);
}
我们一般都认为 num = num + 1 和 num += 1 这两条语句是等价的,后者是前者的简写。
对于加法操作, num + 1 的结果是int类型的,因此num = num + 1这句话在编译过程中,编译器会提示错误“type mismatch: cannot convert from int to byte”。同理,对于num += 1,编译器也应该提示相同的错误。
但是在实际编译时,发现只有第一个运算会报错,而num+=1可以通过编译,说明 += 运算符不仅仅等同于 num = num + 1,而应该等价于
num = (num的数据类型)(num + 1)。
在 += 运算符中,实际隐含了一个强制类型转换的操作。