黑马程序员技术交流社区

标题: java关于强制转换 [打印本页]

作者: 13533258481    时间: 2015-11-1 22:49
标题: java关于强制转换
byte a=3,byte b=4;为什么byte x=a+b;会出现损失精度的情况.而byte x=3+4却可以编译通过.
作者: 孙建志    时间: 2015-11-1 23:10
3和4为常量 java有常量识别机制 所以byte x=3+4能编译通过,而a和b为变量,虚拟机在接受时不知道a和b的值,所以报错
作者: 小肥啾    时间: 2015-11-1 23:12
byte x=3+4  系统默认先计算3 + 4 = 7 不超过byte的精度,赋值成功;但是a+b是转换成int类型进行运算的,结果是int类型的 比byte的类型高,只能强化(还有char和short参与运算都是需要强转的)
作者: 路好营    时间: 2015-11-1 23:55

顶顶顶顶顶顶顶顶顶顶!!!!!!!!!!!!
作者: chenhaiqian    时间: 2015-11-2 01:22
byte x=a+b;会出现损失精度的情况. // a+b会提升为int型相加得到int型,它赋值给byte类型的,所以是会损失精度
而byte x=3+4却可以编译通过 // 常数相加,java编译器会判断值是否超出byte的取值范围,没超过就可以赋值过去,这  个是java虚拟机的常量优化机制
作者: 逝风    时间: 2015-11-2 10:26
  不懂呀
作者: momoxixi    时间: 2015-11-2 10:56
byte short char 计算时都自动转为int型 所以a+b是变量相加,计算后结果为int型 直接赋值给byte x 会损失精度  因为byte空间小 int空间大
而byte x =3+4; 则是常量相加,结果为7 符合byte 的范围-128~127于是赋值给x, 所以不会报错
作者: liuqianfly    时间: 2015-11-2 15:34
学习下,不错!
作者: rookiefly    时间: 2015-11-2 19:09

作者: poppy    时间: 2015-11-5 21:49
顶一下。。。




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