A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 天的那一边 初级黑马   /  2014-9-27 09:22  /  993 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这是我基础测试当中的一个题目

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

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;

4 个回复

正序浏览
d是正确的。b是字节型,1默认是int型。++b是(byte)(b+1)
回复 使用道具 举报
本帖最后由 ζ_____________ 于 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自身的自增, 不涉及到类型提升.


评分

参与人数 1技术分 +1 收起 理由
敏敏好学 + 1 赞一个!

查看全部评分

回复 使用道具 举报
++b就相当于 b = (byte)(b+1)
回复 使用道具 举报
d。我去这都不会。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马