黑马程序员技术交流社区

标题: 关于强制转换的问题?求解答 [打印本页]

作者: chenxin_0916    时间: 2015-12-26 23:52
标题: 关于强制转换的问题?求解答
byte a = 6;
byte b = 2;
byte c = (byte)a/b;
System.out.println(c);
这段代码编译会报错,损失精度.
如果我直接输出:
byte a = 6;
byte b = 2;
System.out.println((byte)a/b);
这样又能正常运行
它们的区别在哪?
第一部分代码不是强转了吗?为什么还会报错?问题出在哪里?

作者: 湛原    时间: 2015-12-27 00:00
运算时如果是byte变量运算会提升为int类型进行运算 比如 a*b , 而int比byt高位 ,向下转要强转
          如果是常量则会自动进行判定, 就是常量优化机制, 不用强转 比如 byte b = 1+2

你的问题是不把(a/b)括号起来 提升的就只是a  ,运算时还会提升为int , 所以会报错
作者: Accoss-x    时间: 2015-12-27 00:49
第一个是因为 在计算机中 有隐式转换, byte, short 在计算时都会自动转换为int类型在运行,你加了强转只是又强转了一次a而不是a/b计算完之后的值,最后的值还是一个int所以会丢失精度,System.out.println((byte)a/b);这里不报错是因为,并没有变量来接收这个值,而是直接打印了 所以不报错 你不加强转也是没问题的。
作者: 愿爱无忧    时间: 2015-12-27 00:57
楼上说的对呀




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