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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© nestor 中级黑马   /  2014-3-27 12:02  /  2375 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 nestor 于 2014-3-27 12:27 编辑
  1. byte b = 1; b = b += 1;

  2. byte b = 1; b = b + 1;

  3. byte b = 1 + 1;
复制代码

在eclipse里“byte b = 1; b = b + 1;”这个是报错的,为什么这个是错的,其它两个是对的?

评分

参与人数 1黑马币 +2 收起 理由
枫儿 + 2 赞一个!

查看全部评分

8 个回复

倒序浏览
byte b = 1;
b = b + 1在这句话中 b+1,b是byte类型,b+1,b类型提升,成为(int)b+1,之后b+i成为int类型,你将类型赋值给byte类型的b,肯定类型转换错误
你可以改成b+=1;
回复 使用道具 举报
青木郎 发表于 2014-3-27 12:18
byte b = 1;
b = b + 1在这句话中 b+1,b是byte类型,b+1,b类型提升,成为(int)b+1,之后b+i成为int类 ...

明白了
b = b + 1 :b类型提升,成为(int)b+1
b+=1:会吧1转换成byte再加给b?
回复 使用道具 举报
nestor 发表于 2014-3-27 12:29
明白了
b = b + 1 :b类型提升,成为(int)b+1
b+=1:会吧1转换成byte再加给b? ...

会吧1转换成byte再加给b?
这句话肯定不对,+=是java支持的一种运算符,至于怎么运算,看一下稳当,但绝不是你说的,
回复 使用道具 举报
  1. public class ByteTest
  2. {
  3.         public static void show(Object o)
  4.         {
  5.                 System.out.println(o);
  6.         }
  7.         public static void main(String[]agrs)
  8.         {
  9.        //java规定可以把表数范围小的类型自动转换为表数范围大的类型
  10.            //你会想1应该是整型怎么可以赋值给byte,但是下面的1表示的是一个
  11.            //整型常量,只要他的值比在b的范围内,就可以完成赋值
  12.            byte b=1;
  13.            show(b);
  14.           
  15.            //这个设计自动转换 和表达式中类型的自动提升
  16.            //java规定在多个类型变量的算术表达式中,表达式的整体类型会自动提升到表达式中
  17.            //类型表数范围最大的那个类型,c是byte 1是整型 所以c+1表达式最终结果的类型为int
  18.            //你想int的结果怎么能赋给比它小的类型byte了
  19.            //解决方法就是在c+1前面加(byte)
  20.        byte c=1;
  21.            c=c+1;//c=(byte)c+1;
  22.            show(c);
  23.       
  24.            //自加 自减 都只是把操作数+-1;不涉及类型转换
  25.            //a+=1   a中的1变成2在赋值给a
  26.            byte a=1;
  27.            a=a+=1;
  28.            show(a);
  29.         }
  30. }
复制代码
回复 使用道具 举报
回复 使用道具 举报
taulinxinny 来自手机 初级黑马 2014-4-24 00:21:15
7#
类似+=的运算符会把它左右两边进行运算,再自动转换成运算符左边的数据类型,然后再赋值给左边。而a=a+1没有自动转换的功能,但会自动提升,所以就出现了自动提升后没有做强制转换就赋值给弱类型的对象,会导致丢失精度的问题。
回复 使用道具 举报
  • 这道题考查基本类型转换。
  • b=1;b=b+=1;这句话要注意+=.jvm虚拟机隐式将int型转换成了byte型。所以这句话并没有错误。
  • byte b=1;b=b+1;这句就是典型的没有使用强转,把一个int型赋值给byte这样会损失精度。
  • byte b=1+1;等号右边等于2,2在byte的-128-127之间。所以也没有问题。
回复 使用道具 举报
对于b=b+1;因为b是 byte类型,它先要自己转换成int型才能与1进行加法运算,运算后的结果为int型,而int类型b+1的值不能直接赋值给byte类型的b.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马