本帖最后由 ζ_____________ 于 2014-9-27 14:35 编辑
//类型转换的时候一定要注意默认的类型是什么样的. 比如说本题的1,虽然是个常量,但是它的默认类型是int. 也就是说占用4个字节.
//但是 变量b 为 byte型, 占用的是1个字节. 所以在赋值的时候一定要对值做强制转换.否则就会损失精度.
byte b = 1 + 1; //错, 因为没有做强制转换 1+1的时候两个1都是int的, byte = int.
byte b = 1; b = b + 1; //错 , 同样的 byte = int;
byte b = 1; b = b += 1; //正确 单看b +=1 是一个整体运算,在做这个整体运算的时候,虽然可以看做 b= b+1 但是他在执行的时候底层默认做了一个对右侧常量的判断,并且做了一个 (byte)的类型强制转换,所以右侧的b赋值完毕并且类型为byte,没有进行类型的提升.再将b += 1赋值给b 也是没问题的.
byte b = 1; b = ++b; //正确 , ++b ,是在byte自身的自增, 不涉及到类型提升.
|