外面看到个相类似的问题。。结果发错了,尴尬
short s1 = 1; s1 += 1;这两句没错啊,如果要说错也是short s1 = 1; s1 =s1+1;有错
因为s1=s1+1这句话先是算出s1+1的值,然后再将值赋给s1,由于s1+1得到是一个int类型的值(运算中s1自动转换成int类型),当你把这个int类型(4个字节)的赋给右边2个字节的short类型s1就会损失精度,当然也就会报错了。想不报错就必须强转:s1=short(s1+1);
而s1+=1这句话着不同,它只运算了一次,就直接将s1+1的值赋给了s1,并且自动完成了强转的动作。 |