本帖最后由 不抛弃不放弃 于 2013-11-12 11:52 编辑
byte b=1;A.b=b+=1;B.b=++b;C.b=b++;哪个是正确的?为什么?
解释:
A. b=b+=1 就是 b=b=b+1 先运行最右边的 b+1,结果为int类型 ,而b是byte类型 int类型付给byte类型得强制转换,所以错误(这句解释我错了谢谢提醒, 在下面我给出新的解释,呵呵)
B. b=++b 就是b=(b+1) 结果为int类型 再赋给byte,所以错误,理由同上
C. b=b++ 就是先进行赋值运算 b=b 然后b++ (b+1),因为b是byte类型 所以C是正确的
在运算的时候都可以运行,因为所有的值都没有超过byte的范围,个人愚见,有说错的地方可以指出来
重新解释: A . b=b+=1; 首先我给你个小例子: char x; x=x-32; //error x-=32; //right 这是什么原因呢? 如下:
首先x-=32;包含了一个隐藏的类型转换! 而x=x-32;却没有隐藏的类型转换,需要自己强制转换,整数默认是int型的。
许多人都认为以下的第一表达式(x+=i) 只是第二个表达式(x=x+i)的简写方式。(我以前也这样想的 呵呵。。).
x+=i; 和 x=x+i;
但是这并不十分准确。这两个表达式都被称为赋值表达式。第二条语句使用的是简单赋值操作符(=),而第一条语句使用的是复合操作符;
复合操作符表达式会自动的将他们所执行的计算结果转换为左侧变量的类型。如果结果的类型与该变量的类型相同,那么这个转型不会造成任何影响。然而,如果结果的类型比该变量的类型要宽,那么复合赋值符将悄悄的执行一个窄化原始类型转换。
而简单赋值操作符则不能完成自动类型转换,
呵呵 ,希望以上的讲解对你有所帮助!!!
|