标题: 那几个正确啊! [打印本页] 作者: 张海洋 时间: 2013-3-21 21:57 标题: 那几个正确啊! 以下代码正确的是? (多选)
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 22:02
自己试试就知道了啊,a,c,d作者: 我自信我很牛 时间: 2013-3-21 22:05
1,正确,因为这个编译的时候,虚拟机直接按照2来编译,所以就不会是1+1了;
2,错误,b先转int和1想加,结果为int不能赋值给byte,编译失败,
3,正确,其实这个技术含量最高,因为+=,-=,*=,/=这些都是直接在这个数值操作,不会新创建空间,所以结果也是byte
4,正确 ++操作也是直接在这个byte的空间上操作,所以可以赋值作者: 朱盛文 时间: 2013-3-21 22:15
a正确,这个在编译时期,直接按照2来编译,所以能编译通过。
b错误,b是byte类型,而1默认是int类型,所以b+1就是int类型,然后再赋给byte类型,在编译的时候虚拟机就会提示损失精度。
c正确,b+=1,这里面其实是一个运算,而且+=这里还有一个强制转型功能,所以不会报错。
d正确,++b是直接在b上操作的运算,所以没有涉及到类型转换,不会报错。作者: 黑马19我最牛 时间: 2013-3-21 22:20
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的情况是一样的.作者: 冯超 时间: 2013-3-21 22:38
我追加一问 问前面回答对的三问:
我们都知道b + = 1 和 b = b + 1;是等价的
既然b+=1是对的,那为什么b = b + 1就是错了,我也知道b是byte类型 1是int类型的 要强转
那么b + = 1 和 b = b + 1 有什么本质的区别了? 作者: 我自信我很牛 时间: 2013-3-21 22:41
冯超 发表于 2013-3-21 22:38
我追加一问 问前面回答对的三问:
我们都知道b + = 1 和 b = b + 1;是等价的
既然b+=1是对的,那为什么b ...
n你看我的回答,就懂了作者: MyNameIs520 时间: 2013-3-21 22:51
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; //这个也是典型的一次运算,底层完成的作者: 冯超 时间: 2013-3-22 16:31
···恩···
··············