黑马程序员技术交流社区

标题: 类型提升问题 [打印本页]

作者: 王军行    时间: 2014-3-19 00:00
标题: 类型提升问题
本帖最后由 王军行 于 2014-3-20 14:42 编辑

  class VariableDemo3
  {
          public static void main(String[] args)
          {
  byte b1 = 3;
  byte b2 = 4;
  byte b3 = 3 + 4;
  byte b4 = b1 + b2;
  System.out.println("b3:"+b3);
  System.out.println("b4:"+b4);
  }
  }
  有问题。
  b3=3+4 ,3和4都是常量,所以java在编译时期会检查该常量的和是否超出byte类型的范围。如果没有可以赋值。
      b4=b1+b2不可以为什么?有解释说是两个byte变量和可能超出范围,但是为什么两个int变量之和不是非要用long型来接收呢???
作者: liushui12344    时间: 2014-3-19 00:10
b1和b2均为变量,而运行byte=b1+b2时, 会先在语法上判断,因为变量的值不确定,会默认为int型,你可以把b4的数据类型定义为int就可以解决问题,或者强制转换也OK
作者: ❤゛Mr._Sun╮    时间: 2014-3-19 13:44
类型转换错了,虽然b1,b2定义为了byte类型,但是b4运算的时候,b1+b2调用的是3+4,运算结果的类型为整数型数据的默认类型,为int ,而定义的b4为byte,出现了两种数据类型不一。精度高的转精度低的,会发生丢失精度,改成byte b4 =byte(b1+b2);就可以了,将结果类型进行强制转换    希望对你有用哦
作者: 戒爱    时间: 2014-3-19 13:51
int b4 = b1 + b2;
b1、b2是不是都是变量,既然是变量那么他们的取值就在[Min, Max]之间,带着不确定性
对于b4它的最大值就是Max,要是b1+b2 < Max,这个时候没有问题,要是b4 > b1 + b2是不是就挂了
作者: 透过生活    时间: 2014-3-19 14:37
类型提升。只能是下级向上级提升。
byte -->  short--->   int ---> long   





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