本帖最后由 t_mac 于 2011-12-7 12:42 编辑
对于楼主这个问题,我拿byte类型来举例吧,道理是一样的。
byte b = 2;
b =b+ 3;
System.out.println(b);
编译结果是不对的,因为java中,整数类型默认的是int
而不同的类型之间是不能之间做运算的,对于整数来说可以做运算,但必须有一个操作为前提
就是自动类型提升,先要把两个数据提升为同一个类型,原则是小的向大的提升,上例中 b是byte
型占一个字节,而3默认为int型 为4个字节,所以要把b提升为四个字节
byte b=2 =00000010->00000000 00000000 00000000 00000010
int 3= 00000000 00000000 00000000 00000011
运算结果为 00000000 00000000 00000000 00000101
要想把以上的结果存到byte里 必须强制转换
b = (byte)(b+3); 而+=自动帮我们完成了这个动作,所以你写b+=3;是可以通过的;
可是这也带来一个问题 如果运算结果溢出即大于127或是小于-128也不会报错,所以大家使用的
时候要特别注意。 |