黑马程序员技术交流社区

标题: 请教:精度问题~~~ [打印本页]

作者: D.reamJA    时间: 2014-9-15 14:20
标题: 请教:精度问题~~~
  1. class demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 byte b=4;
  6.                 byte y=1;
  7.                 b=b+y;//都是byte但是编译不通过,提示的是找到int。 求教
  8.                 System.out.print(b);
  9.         }
  10. }
复制代码


作者: MR.Sun    时间: 2014-9-15 15:01
b=b+y这句。。运算完的时候变成int型了 要强制转换一下。 可以写成b=(byte)(b+y)就可以了。。
作者: cs8630323    时间: 2014-9-15 16:08
MR.Sun 发表于 2014-9-15 15:01
b=b+y这句。。运算完的时候变成int型了 要强制转换一下。 可以写成b=(byte)(b+y)就可以了。。 ...

他问的是为什么,不是怎么办
b=b+y 报错是因为byte类型变量计算时会隐式转换为int类型
作者: 伍建雄    时间: 2014-9-15 16:33
所有byte,shot,和char的变量计算 值都会被提升到int型  因为b+y的时候会提升为int类型,然后再赋给byte类型的b时会报错:损失精度。
作者: Fightin黑马    时间: 2014-9-15 17:04
java在数值运算中都默认是int类型的,b=b+y 虽然b和y 都定义了是byte类型,java有一个常量优化机制,但是两个变量的话虚拟机并不知道里面的数字是多少可能和就超过了byte的范围,因此编译报错.b=3+4;就不会报错,虽然是默认int类型运算的,但java的常量优化机制判断了3+4的和是在byte范围内然后直接赋值给了b,变量时不可以的




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