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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

大茶壶

初级黑马

  • 黑马币:0

  • 帖子:6

  • 精华:0

© 大茶壶 初级黑马   /  2014-2-25 20:48  /  3419 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

a. byte b = 1 + 1;     
b. byte b = 1; b = b + 1;
c. byte b = 1; b = b += 1;   
d. byte b = 1; b = ++b;
这4个选项中,哪一个是正确的?请说明其它不正确的原因

评分

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

查看全部评分

7 个回复

倒序浏览
本帖最后由 曾经的迷失 于 2014-2-25 21:28 编辑

a选项是对,b是错的,c是对的。d也是对的。
回复 使用道具 举报
本帖最后由 我要的幸福呢 于 2014-2-25 21:22 编辑

a.把2赋值给b,因为byte是8位,整数是32位,将整数赋值给byte时会损失高24位,只将最低8位给byte。byte可以表示-128~127范围的整数,超过这个范围就会损失精度。在这个范围内也不能说是错。b.第一句分析同上。第二句b先加1,然后把结果再赋值给b。b+1时,b会先转换成整型,即在高24位补零,值仍为1,加1后为2,再将2(整数)赋值给byte类型的b,分析同点a。
c.没见过第二句这样的语法形式。
d.第二句++b就相当于b点(问题序号b)的第二句,然后将byte类型的b再赋值给b。

评分

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

查看全部评分

回复 使用道具 举报
A是错的  必须强转成byte型  byte相加的结果是int型,B也是对的,D也是对的,C的结果可能会失去精度,越界,byte的取值范围是负的128到正的127.

评分

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

查看全部评分

回复 使用道具 举报
a选项是对的,1+1的结果是int类型的,而byte的范围是-128-127 ,所以把1+1的结果赋给b不会损失精度,所以编译会通过。
b选项也是错的,因为b=b+1中b+1是“变量加上1”,这个值是不确定的。必须b = byte(b + 1)强转转换才能通过。
c选项中是对的。而b = b += 1;是对的,因为b += 1,会自动完成强转动作。
d 选项是对的,b = ++b属于相同类型赋值。

评分

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

查看全部评分

回复 使用道具 举报
这个题主要考察类型的转换和运算符的问题.
答:
a正确
b错误;原因:首先b已经被定义为byte型,编译器对1进行检查时没有超过byte的范围,没有问题  但是当"b+1"
                时b会进行自动类型提升为int型,也就是占了四个字节,当运算过后要把结果赋值给byte型的b时,
                因为byte是占了一个字节,  int是四个字节,  这样就可能会造成数据丢失,所以错误.
c正确
d正确

评分

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

查看全部评分

回复 使用道具 举报
a正确:
此时 (1+1)的类型是根据变量的类型以及数值的范围来确定的。2在byte表示范围内,所以没问题。
b错误:
java中数值加减都是转换为int来加减,结果也是int类型的,大范围赋给小范围需强制转换。
c正确:
因为 b = b +1 和 b += 1 并不是一样的。b += 1 会自动转换类型,实际上就是 b = (byte)(b + 1);
d正确:
同上

评分

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

查看全部评分

回复 使用道具 举报
byte b = 1+1;  //可以 1+1时 运算默认int型 加为2  2在byte范围内 可以赋值给b 相当于b=2;
                // byte b = 1; b = b + 1;  //不可以 编译不通过 b+1 时 b转为int型 1+1变为2 再将int2赋值给byte b不行
                //byte b = 1; b = b += 1; //可以 相当于 b=b=(byte)b+1;
                 //byte b = 1; b = ++b; //可以 相当于b=(byte)b+1;

评分

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

查看全部评分

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