黑马程序员技术交流社区

标题: 数据类型转换问题 [打印本页]

作者: 天的那一边    时间: 2014-9-27 09:22
标题: 数据类型转换问题
这是我基础测试当中的一个题目

以下代码哪个是正确的?为什么?

a. byte b = 1 + 1;     
b. byte b = 1; b = b + 1;
c. byte b = 1; b = b += 1;   
d. byte b = 1; b = ++b;
作者: THE_FUTURE    时间: 2014-9-27 09:26
d。我去这都不会。
作者: 海燕    时间: 2014-9-27 10:40
++b就相当于 b = (byte)(b+1)
作者: ζ_____________    时间: 2014-9-27 11:25
本帖最后由 ζ_____________ 于 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自身的自增, 不涉及到类型提升.



作者: wuchao226    时间: 2014-9-27 11:32
d是正确的。b是字节型,1默认是int型。++b是(byte)(b+1)




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2