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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Teemo_Mann 中级黑马   /  2014-4-14 11:00  /  1252 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 Teemo_Mann 于 2014-4-14 13:55 编辑

1.byte b = 1; b = b + 1;  这个是错的,因为
使用二目运算符的运算中,低于int型的都会转成int运算 ,所以在B选项中b+1被转换成了int,int赋给一个byte对象需要强制转换.
2.而如果是像b += 1,和b++这种都是一目运算符,其实在底层判断范围未超过128后会自动转成
(byte)b = (byte)b + (byte)1;
但是我想问最后一种byte b = 1 + 1; 不报错的原因难道也是如2的原因吗

评分

参与人数 1技术分 +1 收起 理由
黑妞~ + 1

查看全部评分

4 个回复

倒序浏览
宋大龙 来自手机 中级黑马 2014-4-14 11:09:39
沙发
byte=b+1     因为b是一个变量+1之后范围可能会大于byte.   +=和++这种运算符其实是自带强转的。所以也没问题,而byte b=1+1     两个确定的数相加而且结果在byte范围内  当然不会报错!
回复 使用道具 举报
宋大龙 发表于 2014-4-14 11:09
byte=b+1     因为b是一个变量+1之后范围可能会大于byte.   +=和++这种运算符其实是自带强转的。所以也没问 ...

赞, 豁然开朗
回复 使用道具 举报
  1.                 byte b = 1;
  2.                 b += 1289;//没报错
  3.                 b++;//没报错
  4.                 b = b + 1;//报错
  5.                 b = b * 1;//报错
  6.                 b = 1 + 1;//没报错
  7.                 b = 127 + 1;//报错
  8.                 b = 128;//报错
  9.                 b = 127;//没报错
  10.                 byte c = b + 1;//报错
复制代码

1.一目运算符自动强转,即使计算结果超过数值范围
2.二目会检查计算结果是否超过数值范围,不进行损失精度的强转。如果有变量参与运算,恐怕会自动归为结果超出范围,得手动强转。

评分

参与人数 1技术分 +1 收起 理由
黑妞~ + 1

查看全部评分

回复 使用道具 举报
宋大龙 发表于 2014-4-14 11:09
byte=b+1     因为b是一个变量+1之后范围可能会大于byte.   +=和++这种运算符其实是自带强转的。所以也没问 ...

解释的很清楚,感谢
我特意去试了byte b= 127 + 1;
byte b= 127; b++;
都是无法编译通过的,
和你解释的一致,可以结贴了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马