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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© D.reamJA 高级黑马   /  2014-9-15 14:20  /  1061 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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. }
复制代码

4 个回复

倒序浏览
b=b+y这句。。运算完的时候变成int型了 要强制转换一下。 可以写成b=(byte)(b+y)就可以了。。
回复 使用道具 举报
MR.Sun 发表于 2014-9-15 15:01
b=b+y这句。。运算完的时候变成int型了 要强制转换一下。 可以写成b=(byte)(b+y)就可以了。。 ...

他问的是为什么,不是怎么办
b=b+y 报错是因为byte类型变量计算时会隐式转换为int类型
回复 使用道具 举报
所有byte,shot,和char的变量计算 值都会被提升到int型  因为b+y的时候会提升为int类型,然后再赋给byte类型的b时会报错:损失精度。
回复 使用道具 举报
java在数值运算中都默认是int类型的,b=b+y 虽然b和y 都定义了是byte类型,java有一个常量优化机制,但是两个变量的话虚拟机并不知道里面的数字是多少可能和就超过了byte的范围,因此编译报错.b=3+4;就不会报错,虽然是默认int类型运算的,但java的常量优化机制判断了3+4的和是在byte范围内然后直接赋值给了b,变量时不可以的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马