byte b = 1; 为什么通过就不说了。
b = b += 1 和 b = b + 1; 是有区别的:
b = b += 1
b= (b+=1):
因为 b+=1 是一个复合赋值表达式,在其内部有一个自动转换动作。然后再将b=b 是正确的。
=号右边的转换成左边的数据类型,高类型->低类型 自动转化格式
是java中唯一的高类型向低类型自动转换 (b+=1)执行完是一个byte类型
b = b + 1;
b在这里是变量,是byte类型的变量,1是int型的。编译器将b提升为int型的。然后和1相加
(b+1) 但是“=”右边是变量的情况下,变量代表的是一片内存空间,无法判断是否在byte
范围内。int在内存中占4个字节,byte是占1个字节,左边放不下,错误,报的是 数据精度丢失。