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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 徐卓 中级黑马   /  2013-7-12 16:12  /  2019 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 徐卓 于 2013-7-13 12:52 编辑

byte b = 1 + 1;   
byte b = 1; b = b + 1;
byte b = 1; b = b += 1;   
byte b = 1; b = ++b;  
在上面4个代码中,第一个是对的,定义b为byte型,且值为2
第二个是b+1为byte加int类型结果为int类型,把int类型赋值给byte类型的b会产生编译错误,精度丢失。
第三个b=b+=1,相当于b=b=b+1,应该也会出现精度丢失,为什么编译时没有报错????求解答
第四个同三!!!!why

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 淡定

查看全部评分

2 个回复

倒序浏览
java在表达式中,对中间值的精确要求有时可能会超过任何一个操作数的范围。例如,考虑下面的表达式: byte a = 40; byte b = 50; byte c = 100; int d = a * b / c; 中间项结果a*b 很容易超过它的任何一个byte 型操作数的范围。为处理这种问题,当分析表达式时,Java自动提升各个byte 型或short型的操作数到int 型。这个过程是java自动进行的,所以可要留意了。
自加没有自动类型提升问题
由于+=运算符有自加功能,定义short s1 = 1;时,开辟了一个空间,当通过+=运算符运算时,只是在原来的栈中进行运算;不需强行转化;

评分

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

查看全部评分

回复 使用道具 举报 2 0
于世德 发表于 2013-7-13 12:32
java在表达式中,对中间值的精确要求有时可能会超过任何一个操作数的范围。例如,考虑下面的表达式: byte  ...

哦  ok   谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马