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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张海洋 中级黑马   /  2013-3-21 21:57  /  1889 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

        以下代码正确的是? (多选)
a.        byte b = 1 + 1;     
b.        byte b = 1;        b = b + 1;   
c.        byte b = 1;        b += 1;   
d.        byte b = 1;        b = ++b;   

点评

如果问题未解决,请继续追问回复者,如果问题已经解决,请将分类改为“已解决”,谢谢  发表于 2013-3-21 23:01

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 鼓励鼓励

查看全部评分

8 个回复

倒序浏览
自己试试就知道了啊,a,c,d
回复 使用道具 举报
1,正确,因为这个编译的时候,虚拟机直接按照2来编译,所以就不会是1+1了;
2,错误,b先转int和1想加,结果为int不能赋值给byte,编译失败,
3,正确,其实这个技术含量最高,因为+=,-=,*=,/=这些都是直接在这个数值操作,不会新创建空间,所以结果也是byte
4,正确  ++操作也是直接在这个byte的空间上操作,所以可以赋值

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
a正确,这个在编译时期,直接按照2来编译,所以能编译通过。
b错误,b是byte类型,而1默认是int类型,所以b+1就是int类型,然后再赋给byte类型,在编译的时候虚拟机就会提示损失精度。
c正确,b+=1,这里面其实是一个运算,而且+=这里还有一个强制转型功能,所以不会报错。
d正确,++b是直接在b上操作的运算,所以没有涉及到类型转换,不会报错。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
a,c,d
A:这个是赋值,是直接把1+1的值2赋值给b,
B:因为b是byte型的,1是int型的,b+1后的结果会自动提升到高位也就是int型,然后再给b,但是b是byte型的,会出现精度丢失.
C:b+=1 这个是在JAVA里面直接自动完成的,
D:这个情况和C的情况是一样的.

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
我追加一问 问前面回答对的三问:
我们都知道b + = 1  和 b = b + 1;是等价的
  既然b+=1是对的,那为什么b = b + 1就是错了,我也知道b是byte类型 1是int类型的 要强转
那么b + = 1  和 b = b + 1 有什么本质的区别了?
   

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
冯超 发表于 2013-3-21 22:38
我追加一问 问前面回答对的三问:
我们都知道b + = 1  和 b = b + 1;是等价的
  既然b+=1是对的,那为什么b  ...

n你看我的回答,就懂了
回复 使用道具 举报
a.        byte b = 1 + 1;                       //这是明确的计算,属于赋值,且最终结果没有超过-128~127,所以是正确的
b.        byte b = 1;        b = b + 1;      //byte+int  最终结果应用int保存,所以b=b+1会损失精度,这是错误的
c.        byte b = 1;        b += 1;          //+= 这是一次运算~~~相当于加1赋值~~~
d.        byte b = 1;        b = ++b;       //这个也是典型的一次运算,底层完成的

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
冯超 高级黑马 2013-3-22 16:31:11
9#
···恩···
··············
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马