A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王军行 中级黑马   /  2014-3-19 00:00  /  1210 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王军行 于 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型来接收呢???

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

4 个回复

正序浏览
类型提升。只能是下级向上级提升。
byte -->  short--->   int ---> long   
回复 使用道具 举报
int b4 = b1 + b2;
b1、b2是不是都是变量,既然是变量那么他们的取值就在[Min, Max]之间,带着不确定性
对于b4它的最大值就是Max,要是b1+b2 < Max,这个时候没有问题,要是b4 > b1 + b2是不是就挂了

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
类型转换错了,虽然b1,b2定义为了byte类型,但是b4运算的时候,b1+b2调用的是3+4,运算结果的类型为整数型数据的默认类型,为int ,而定义的b4为byte,出现了两种数据类型不一。精度高的转精度低的,会发生丢失精度,改成byte b4 =byte(b1+b2);就可以了,将结果类型进行强制转换    希望对你有用哦

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
b1和b2均为变量,而运行byte=b1+b2时, 会先在语法上判断,因为变量的值不确定,会默认为int型,你可以把b4的数据类型定义为int就可以解决问题,或者强制转换也OK

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马