黑马程序员技术交流社区
标题:
byte b = 2和byte b;b=b+2;的问题分析
[打印本页]
作者:
zhuohong_xiao
时间:
2014-8-14 15:46
标题:
byte b = 2和byte b;b=b+2;的问题分析
本帖最后由 zhuohong_xiao 于 2014-8-14 15:53 编辑
对于byte b = 2的理解
等号右边是2。2是常量,固定不变的。2会问系统是否在在b的范围内,在就将2赋值给b。
这个是
自动转换
动作。
对于
byte b;
b = b +2;
理解b是一个变化的值。b+2也是一个变化的值,是个变量,不确定。就容易丢失精度。
2是一个int类型的值。b+2效果是b
自动提升
为int类型的值再与2相加。
得到b+2的结果也是int类型的值。
将int类型的结果赋值给byte类型的b就会造成丢失精度。
所以就要对b=b+2;
修改为
b= (byte)(b+2);
在这里使用了
强制类型转换
。将b+2的结果强制转换为byte类型在赋值给b。
不知道我这么理解有没有错误。高人帮忙看看。谢谢。有误请指出。不胜感激!
作者:
shuimu_88
时间:
2014-8-14 18:46
是的,没有强转会损失精度,编译通不过的
作者:
月夜小楠
时间:
2014-8-14 21:36
应该是对的!
作者:
高远
时间:
2014-8-14 22:13
恩,所以一般的表示都是b +=2,赋值后b还是byte
作者:
亨利大帝
时间:
2014-8-14 22:14
非常正确,因为byte short参与运算直接自动提升为int类型,然后再做运算,所以赋值号右边是一个int类型,int类型占四个字节,而byte一个字节,将大的赋值给小的,肯定会损失精度。其中楼主:理解b是一个变化的值。b+2也是一个变化的值,是个变量,不确定。就容易丢失精度。这个理解有点偏差
作者:
象牙
时间:
2014-8-14 22:36
数据类型转换,理解的挺好
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2