详细说明一下:
java中不同类型数据之间进行算术运算,为了保证结果的精确,系统会将结果自动转换成精度更高的的数据类型。精度由高度到低为double,float,long ,int ,(short,char,byte),
进行算术运算的最低等级是int型,这意味着如果参与运算的数据类型精度都小于int,即为(short,char,byte)中的任意类型,数据都会自动转换成int型。
byte a=126;a=a+4。
+是算术运算符,由于4为int型,系统会将计算结果类型按上面的规则自动转换为int型,int型的结果无法赋值给byte类型的 a变量,只能强行转换,强行转换会损失精度。
另外将 a变量的类型从byte改为int,结果类型仍然为int,结果与变量类型就会匹配。
+=是复合赋值运算符,复合赋值运算不会改变结果的类型。
byte a=126;a+=4;结果类型仍然是byte类型,与byte类型的 a变量匹配,所以不会报错。 改为int也会匹配,都是int型的。
|