Java中a += b与a = a + b有区别!
首先看a = a + b
1.a为int型数据,b的精度小于或等于int
这是我们最常见的现象,Java将b的精度提升为int,然后计算。
int a = 127;
byte b = 1;
a = a + b;//a = 128
代码可以执行,结果为a = 128
2.a的精度小于int,b的精度小于或等于int
byte a = 127;
byte b = 1;
a = a + b;
出现了下面的Error
编译软件直接报错------类型不匹配:无法从int转换为byte
原因是:
-等号左边的a为byte类型
-等号右边a+1,Java在进行精度小于int的运算时将表达式中所有值自动提升为int型,所以a+b是一个int型数据,
-在赋值时,int不能自动转换为byte
需要进行强制类型转换
byte a = 127;
byte b = 1;
a = (byte)(a + b);//a = -128
byte中127的二进制表示为0111 1111
byte中 1 的二进制表示为0000 0001
首先将127和1转换为int型,再相加,结果为
0000 0000 0000 0000 0000 0000 1000 0000
强制转换为byte时取后八位1000 0000,在byte中就是-128
再看a += b
1.a为int型数据,b的精度小于或等于int
int a = 127;
byte b = 1;
a += b;//a = 128
这与a = a + b结果是一致的,结果为a = 128
2.a的精度小于int,b的精度小于或等于int
byte a = 127;
byte b = 1;
a += b;//a = -128
这与a = (byte)(a + b);是一样的结果,证明a += b 时进行了强制类型转换
总结
当a的精度大于或等于b的精度时,a = a + b与a += b相同,a += b的结果与a的数据类型一致
当a的精度小于或等于b的精度时,a = a + b出现类型不匹配错误,a += b的结果与a的数据类型一致