黑马程序员技术交流社区

标题: byte的加法 [打印本页]

作者: 徐卓    时间: 2013-7-12 16:12
标题: byte的加法
本帖最后由 徐卓 于 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

作者: 于世德    时间: 2013-7-13 12:32
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;时,开辟了一个空间,当通过+=运算符运算时,只是在原来的栈中进行运算;不需强行转化;


作者: 徐卓    时间: 2013-7-13 12:50
于世德 发表于 2013-7-13 12:32
java在表达式中,对中间值的精确要求有时可能会超过任何一个操作数的范围。例如,考虑下面的表达式: byte  ...

哦  ok   谢谢




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