黑马程序员技术交流社区

标题: 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