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

例子如下:  byte b1 = 3 , b2 = 5, b3;
b3 = b1 + b2 ;   // 这个编译不通过,提示损失精度  这个都是byte,不需要类型提升呀?  都是同样的类型 是因为byte + byte 然后运算结果是个数字,所以是int这样子理解么?
b3 = b1 + 2;// 这个编译不通过,提示损失精度    因为+后面是int类型  相当于  byte + int  所以类型提升   int + int  最终结果为int  然后赋给byte 这个理解




评分

参与人数 1黑马币 +2 收起 理由
洋葱头头 + 2 很给力!

查看全部评分

10 个回复

倒序浏览
b2是int,b1是byte,所以相加损失精度。

评分

参与人数 1黑马币 +1 收起 理由
洋葱头头 + 1 很给力!

查看全部评分

回复 使用道具 举报
第一个b3=b1+b2;因为b1是3,int型,b2是5也是int型,高精度向低进度转换会损失精度;

评分

参与人数 1黑马币 +1 收起 理由
洋葱头头 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
WDzyll 发表于 2016-4-30 10:26
b2是int,b1是byte,所以相加损失精度。

可是b1和b2不都是byte类型的么?为什么b2是int,b1是byte?
回复 使用道具 举报
小红花 发表于 2016-4-30 10:42
第一个b3=b1+b2;因为b1是3,int型,b2是5也是int型,高精度向低进度转换会损失精度; ...

赋值的时候,b1 = 3 ,这个时候是把int截取了之后存入byte类型内存中 , 同理b2 = 5也是这样,然后这步操作完成后,就已经是byte类型。。。然后进行+操作。。然后赋值。。。
回复 使用道具 举报
董志立 发表于 2016-4-30 10:58
可是b1和b2不都是byte类型的么?为什么b2是int,b1是byte?

b2是byte? b2是变量,b1你限定了byte类型
回复 使用道具 举报
WDzyll 发表于 2016-4-30 11:28
b2是byte? b2是变量,b1你限定了byte类型

b2不是申明的是byte么??
回复 使用道具 举报
整数运算的默认类型为 int ,当b1+b2 运算时,就已经转换为了int型了,int赋值给byte当然需要强转了,b3 =(byte)b1+b2
回复 使用道具 举报
yuanzhen 发表于 2016-4-30 13:08
整数运算的默认类型为 int ,当b1+b2 运算时,就已经转换为了int型了,int赋值给byte当然需要强转了,b3 =(byte ...

b3 = (byte)(b1+b2);
回复 使用道具 举报
虚拟机运算默认的是int类型,他会把b1,b2提升我int类型运算,所以结果是int类型,你吧他往byte类型装,当然出错了

评分

参与人数 1黑马币 +2 收起 理由
洋葱头头 + 2 赞一个!

查看全部评分

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