一、 =+ 和+= 运算的返回值类型
看个有趣的例子:
short i1 = 10;
//i1 = i1 + 1; //不兼容的类型: 从int转换到short可能会有损失
i1 += 1; //下面打印11
System.out.print("i1 =" + i1 + '
');
short i2 = 10;
//i2 = i2 + 1.1; // 不兼容的类型: 从double转换到short可能会有损失
i2 += 1.1; //下面打印11
System.out.print("i2 =" + i2 + '
');
char c = 'C';
//c = c + 1; //不兼容的类型: 从int转换到char可能会有损失
c += 1; //下面打印D
System.out.print(c);
为什么采用a = a + 1方式就编译错误;使用a += 1方式就正确呢? 这是因为=+和+=在Java中处理是不一样的。
1)+:编译器将右边的表达式结果计算出来后,和左边的变量类型比较,如果左边的变量精度低于右边的结果的精度,编译器会显式的报错,告诉程序员去强制转型。
2)+=:编译器 **自动隐式** 直接将+=运算符后面的操作数 强制装换 为前面变量的类型,然后在变量所在的内存区上直接根据右边的操作数修改左边变量内存存储的二进制数值。
所以:也就知道为啥i1 += 1不报错,且打印结果是11,而不是11.1。