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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhuohong_xiao 中级黑马   /  2014-8-14 15:46  /  2278 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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。


不知道我这么理解有没有错误。高人帮忙看看。谢谢。有误请指出。不胜感激!

6 个回复

倒序浏览
是的,没有强转会损失精度,编译通不过的
回复 使用道具 举报
应该是对的!
回复 使用道具 举报
恩,所以一般的表示都是b +=2,赋值后b还是byte
回复 使用道具 举报
非常正确,因为byte  short参与运算直接自动提升为int类型,然后再做运算,所以赋值号右边是一个int类型,int类型占四个字节,而byte一个字节,将大的赋值给小的,肯定会损失精度。其中楼主:理解b是一个变化的值。b+2也是一个变化的值,是个变量,不确定。就容易丢失精度。这个理解有点偏差
回复 使用道具 举报
数据类型转换,理解的挺好

点评

谢谢。  发表于 2014-8-18 19:02
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马