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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 雪碧拌米饭 中级黑马   /  2014-9-13 01:18  /  1229 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

a. byte b = 1; b = b + 1;
b. byte b = 1; b = b += 1;
这两个的区别到底是什么?为什么b选项编译可以通过,打印b=2;而a选项却编译出错?

评分

参与人数 1黑马币 +5 收起 理由
格子、 + 5 神马都是浮云

查看全部评分

6 个回复

倒序浏览
本帖最后由 依然超级赛亚人 于 2014-9-13 17:24 编辑

a选项中的b是byte类型,1是默认的int类型,相加之后赋给byte类型的变量b会造成损失精度的问题。而b选项中自增操作符有隐含的类型强制转换功能,所以b+=1就相当于b=(byte)(b+1).

评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 很给力!

查看全部评分

回复 使用道具 举报
容量来说,小可以自动转换为大的,大的却不能自动转换小的,所以要强转b = (byte)b+1

评分

参与人数 1黑马币 +5 收起 理由
格子、 + 5 淡定

查看全部评分

回复 使用道具 举报
A:byte b = 1; b = b + 1;不正确,因为java默认的整数类型为int类型,而b+1相当于byte类型和int类型相加,
     java底层会自动byte类型提升为int 类型,相加后的结果还是int类型,byte类型装不下。
B:正确。因为+=运算符在给b赋值时,自动完成了强转操作
回复 使用道具 举报
楼上正解,第二种方式直接写b+=1就可以,+=表示把左右两边的和赋值给左边
回复 使用道具 举报
a项   b是byte类型,b在与int型1做运算时会自动转换成int型,而运算完后将int型赋值给byte型是不行的,可以加个强转。
回复 使用道具 举报
そ花痕ゐ蝶梦 发表于 2014-9-13 08:43
A:byte b = 1; b = b + 1;不正确,因为java默认的整数类型为int类型,而b+1相当于byte类型和int类型相加,
...

为什么就不是int赋给byte类型是自动取int类型的低8位呢?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马