黑马程序员技术交流社区

标题: 关于类型转换,感觉说的不清楚? [打印本页]

作者: 董志立    时间: 2016-4-30 09:53
标题: 关于类型转换,感觉说的不清楚?
例子如下:  byte b1 = 3 , b2 = 5, b3;
b3 = b1 + b2 ;   // 这个编译不通过,提示损失精度  这个都是byte,不需要类型提升呀?  都是同样的类型 是因为byte + byte 然后运算结果是个数字,所以是int这样子理解么?
b3 = b1 + 2;// 这个编译不通过,提示损失精度    因为+后面是int类型  相当于  byte + int  所以类型提升   int + int  最终结果为int  然后赋给byte 这个理解





作者: WDzyll    时间: 2016-4-30 10:26
b2是int,b1是byte,所以相加损失精度。
作者: 小红花    时间: 2016-4-30 10:42
第一个b3=b1+b2;因为b1是3,int型,b2是5也是int型,高精度向低进度转换会损失精度;
作者: 董志立    时间: 2016-4-30 10:58
WDzyll 发表于 2016-4-30 10:26
b2是int,b1是byte,所以相加损失精度。

可是b1和b2不都是byte类型的么?为什么b2是int,b1是byte?
作者: 董志立    时间: 2016-4-30 11:16
小红花 发表于 2016-4-30 10:42
第一个b3=b1+b2;因为b1是3,int型,b2是5也是int型,高精度向低进度转换会损失精度; ...

赋值的时候,b1 = 3 ,这个时候是把int截取了之后存入byte类型内存中 , 同理b2 = 5也是这样,然后这步操作完成后,就已经是byte类型。。。然后进行+操作。。然后赋值。。。

作者: WDzyll    时间: 2016-4-30 11:28
董志立 发表于 2016-4-30 10:58
可是b1和b2不都是byte类型的么?为什么b2是int,b1是byte?

b2是byte? b2是变量,b1你限定了byte类型
作者: 董志立    时间: 2016-4-30 11:57
WDzyll 发表于 2016-4-30 11:28
b2是byte? b2是变量,b1你限定了byte类型

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

b3 = (byte)(b1+b2);
作者: tylw123    时间: 2016-4-30 13:46
虚拟机运算默认的是int类型,他会把b1,b2提升我int类型运算,所以结果是int类型,你吧他往byte类型装,当然出错了




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