黑马程序员技术交流社区

标题: 测试题-4、 以下代码哪个是正确的?为什么? a. byte b = 1 + 1; b. [打印本页]

作者: 王会涛    时间: 2014-12-11 20:00
标题: 测试题-4、 以下代码哪个是正确的?为什么? a. byte b = 1 + 1; b.
答:a,c,d正确;
4、 以下代码哪个是正确的?为什么?
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;
选项a:
选项b中,b+1的结果默认转换为int型,int型不能直接转换为byte型,需强制转换。应改为:byte b=1;b=(byte)(b+1);
b=b+1是两次运算,b被提升为int型,运算结果为int,无法赋值给byte类型
选项c中,b+=1是一次运算,包含了一个隐藏的类型转换,相当于 b=(byte)(b+1);
选项d中,b=++b是一次运算,也包含了一个隐藏的类型转换

为啥我感觉第一个也是错的呀,谁能解释一下,水了,基础知识不老,
作者: 头狼    时间: 2014-12-11 20:16
a是对的,因为右边是两个常量相加,它会判断是否在byte的取值范围里,如果在,就输出,如果超出byte的取值范围就会报错。我的理解。
作者: 王会涛    时间: 2014-12-12 19:57
头狼 发表于 2014-12-11 20:16
a是对的,因为右边是两个常量相加,它会判断是否在byte的取值范围里,如果在,就输出,如果超出byte的取值 ...

谢谢,是这么回事!
作者: 头狼    时间: 2014-12-12 21:16
不客气,我刚学基础,正好知道
作者: 牧歌    时间: 2014-12-12 21:22
我表示我也犯迷糊。。。
作者: 怀英    时间: 2015-7-16 07:31
头狼 发表于 2014-12-11 20:16
a是对的,因为右边是两个常量相加,它会判断是否在byte的取值范围里,如果在,就输出,如果超出byte的取值 ...

这个解释好,一直知道这个选项是对的,但是不知道为什么对
作者: 醉翁之意不在酒    时间: 2015-7-19 00:54
帖子為什麼是14年的,這論壇該怎麽看,才看的到最新的?




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2