黑马程序员技术交流社区

标题: 关于精度损伤的问题。 [打印本页]

作者: jsfjb    时间: 2012-10-31 12:32
标题: 关于精度损伤的问题。
  1.                 byte a = 0;
  2.                 //a = (byte)(a+4);这句运行正常。木有问题。
  3.                 a = a + (byte)4;//这句有问题吗?猜猜!并说出原因。
  4.                 System.out.println(a);
复制代码
这个问题我感觉有点猥琐。大家一定要hold住!
这儿的   a = a + (byte)4;  这句是有问题的。但是我有疑惑,问什么这样转化就不行?
作者: 小灰灰    时间: 2012-10-31 12:36
猜猜  这句话会报错吗?
  1. a +=  (byte)4;
复制代码

作者: 小灰灰    时间: 2012-10-31 12:36
猜猜  这句话会报错吗?
  1. a +=  (byte)4;
复制代码

作者: 种生祥    时间: 2012-10-31 12:39
貌似因为那个+号
这样不用转换也不损失精度
a+=4;
作者: jsfjb    时间: 2012-10-31 12:41
都彭韬 发表于 2012-10-31 12:36
猜猜  这句话会报错吗?

谢谢。
没有报错,
a = a+(byte)4; 与 a += (byte)4;
有什么区别?能从底层分析 一下么?
谢谢!
作者: xuchulong1    时间: 2012-10-31 17:45
a = (byte) (a + (byte)4);计算完的结果再进行下强制转换。a + (byte)4这个式子计算完编译器认为结果是  int  你把int赋值给byte,就出状况了
作者: xuchulong1    时间: 2012-10-31 17:48
jsfjb 发表于 2012-10-31 12:41
谢谢。
没有报错,
a = a+(byte)4; 与 a += (byte)4;

这个记得在一个帖子中回复过,前一个   先做加操作   再做赋值操作,所以会出错
第二个是直接对 a进行加 4  效率高,而且不涉及赋值,所以不会出错




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