黑马程序员技术交流社区

标题: 一道很容易答错的基础题 [打印本页]

作者: 怪学究    时间: 2015-4-27 23:36
标题: 一道很容易答错的基础题
3、 以下代码哪个是正确的?为什么?

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;
作者: 嘛嘛咪阿    时间: 2015-4-27 23:53
acd是正确的.   b错是因为b=b+1,,后面的b是byte类型,但是和int类型的1运算,会自动提升成为int类型的,但是b是byte类型,int类型超出了范围
作者: lywy1990    时间: 2015-4-27 23:55
acd正确,b错
作者: 鸡脑壳    时间: 2015-4-27 23:57
acd三个答案
作者: 893269222    时间: 2015-4-27 23:58
本帖最后由 893269222 于 2015-4-28 00:02 编辑

a正确,常量是不需要强制类型转换;
b错误,可能损失精度
c 正确,没搞懂,反正编译通过

作者: 怪学究    时间: 2015-4-27 23:58
这道题选ACD
作者: 嘎路的米    时间: 2015-4-28 00:02
acd是对的。(a)相当于给b的初始值为2;( b) 在执行b+1的时候,b自动提升为int类型然后再+1,计算后的结果为int,必须执行强制类型转换为byte才行;(c、d) b+=1和++b中自带强制类型转换,所以计算后的类型还是byte
作者: Freshbird    时间: 2015-4-28 00:04
b肯定错,感觉a也不对
作者: Cat    时间: 2015-4-28 09:27
学习一下~
作者: silencer    时间: 2015-4-28 09:39
acd   ok   
作者: dengxing    时间: 2015-4-28 09:41
嘛嘛咪阿 发表于 2015-4-27 23:53
acd是正确的.   b错是因为b=b+1,,后面的b是byte类型,但是和int类型的1运算,会自动提升成为int类型的,但是b ...

终于是明白了
作者: 谷歌    时间: 2015-4-28 09:47
数据的转换确实很烦人啊
作者: Oscars    时间: 2015-4-28 09:56
受教了!
作者: 吕晓阳    时间: 2015-4-28 10:06
看着挺简单,实则不简单
作者: 智远    时间: 2015-4-28 12:01
答错了。。。
作者: 陈明佳    时间: 2015-4-28 12:14
ACD是正确的,涉及到了自动提升,请问一下这是面试题吗?
作者: wuyingtong    时间: 2015-4-28 12:30
acd  a是两个常量相加结果在byte范围内,赋值给b。b是先提升int类型再相加。c中 += 隐含强制转换,d和a
作者: 只吃饭不洗碗    时间: 2015-4-28 13:57
ji chu ce shi yi da
作者: 澂澂    时间: 2015-4-28 18:05
晕,这样的题,我不会,看起来简单,实际不简单呀。
作者: IDhmpj    时间: 2015-4-28 19:24
893269222 发表于 2015-4-27 23:58
a正确,常量是不需要强制类型转换;
b错误,可能损失精度
c 正确,没搞懂,反正编译通过

+=会自动完成类型转化
作者: 348532020    时间: 2015-4-28 19:29
还真做错了。。。
作者: 熬夜看书    时间: 2015-4-28 19:48
acd~
学习下了,顺便去复习下,之前学习的基础
作者: 大西洋    时间: 2015-4-28 20:22
老老实实在eclipse里面敲了一下,a/c/d 是对的,b 是错的~

错误提示,不能从 int 转为 byte

除非,
byte b = 1;
b = ( byte )( b + 1 ); // 强制转换,编译通过,输出结果为2
作者: 胡谭龙    时间: 2015-4-28 20:35
还行吧

作者: lslkkk    时间: 2015-4-28 20:53
还是漏选了,唉
作者: wangyu    时间: 2015-4-28 21:14
ac吧               
作者: godrick007    时间: 2015-4-28 21:16
虽然我不知道但是我还是要顶你
作者: youngzk    时间: 2015-4-28 21:26
这道题选A  C  D
作者: 怪学究    时间: 2015-4-28 21:31
陈明佳 发表于 2015-4-28 12:14
ACD是正确的,涉及到了自动提升,请问一下这是面试题吗?

对的,面试题
作者: major2015    时间: 2015-4-29 15:35
b = b += 1; 几个意思?
作者: 怪学究    时间: 2015-4-29 20:56
major2015 发表于 2015-4-29 15:35
b = b += 1; 几个意思?

就是b先自增,然后将其值付给一个新的b
作者: 牛仔很忙fire    时间: 2015-4-29 21:03
嘎路的米 发表于 2015-4-28 00:02
acd是对的。(a)相当于给b的初始值为2;( b) 在执行b+1的时候,b自动提升为int类型然后再+1,计算后的结果为 ...

不错,理解了已经
作者: 王英明    时间: 2015-4-29 21:10
呵呵呵,又学到了一点知识!
作者: 付长云    时间: 2015-4-29 21:11
顶~~~~~~~~~~~~~~~~~~~
作者: 19期1910    时间: 2015-4-29 21:18
已学过,不过可以回顾一下,顶一下
作者: 乘梦而飞    时间: 2015-4-29 21:25
我就路过看看
作者: 我爱吃橙子    时间: 2015-4-29 21:26
第一次打错了受教了
作者: andre    时间: 2015-4-29 21:28
来学习,看看
作者: 崔小可    时间: 2015-4-29 21:29
acd是正确的.   b错是因为b=b+1,,后面的b是byte类型,但是和int类型的1运算,会自动提升成为int类型的,但是b是byte类型,int类型超出了范围
作者: 雪风飞花    时间: 2015-4-29 21:46
顶一个:lol
作者: Oh.Ba    时间: 2015-4-29 21:48
D对吧,应该
作者: 米江波    时间: 2015-4-29 21:56
第二个错了 其他的都对啦。。
作者: qw4096    时间: 2015-4-29 22:03
除了第2个,其他都对
作者: xuelanghu120    时间: 2015-4-29 22:07
类型转化问题
作者: 黄敬璇    时间: 2015-4-29 22:11
这个知识点确实要好好搞懂,要为以后打下坚实的基础
作者: 最好的我    时间: 2015-4-29 22:11
赞赞赞~~~~~~~~~~~~~~~~~
作者: fanxia_2007    时间: 2015-4-29 22:14
c没看明白,求大神解答一下。
作者: 北京南瓜    时间: 2015-4-29 22:20
话说a这样赋值我还以为错的(⊙﹏⊙)b
作者: 下海的鱼儿    时间: 2015-4-29 22:21
b 肯定是错的
作者: major2015    时间: 2015-4-29 22:23
怪学究 发表于 2015-4-29 20:56
就是b先自增,然后将其值付给一个新的b

b += 1; 就可以了啊
作者: tanzhixue    时间: 2015-4-29 22:26
893269222 发表于 2015-4-27 23:58
a正确,常量是不需要强制类型转换;
b错误,可能损失精度
c 正确,没搞懂,反正编译通过

c隐含类型强转
作者: lockwood    时间: 2015-4-29 22:27
好简单呀。
作者: w_lin521    时间: 2015-4-29 22:35
怪学究 发表于 2015-4-29 20:56
就是b先自增,然后将其值付给一个新的b

刚上基础班,学的比较浅,正好今天老师讲到了c中的运算,老师说, 代码 b+=1就可以翻译为b=b+1呢,可是这个题,如果c改称为 byte b = 1; b+=1后,c也是正确的吧?
作者: nate996    时间: 2015-4-29 22:43
受教了!
作者: 怪学究    时间: 2015-4-29 23:19
w_lin521 发表于 2015-4-29 22:35
刚上基础班,学的比较浅,正好今天老师讲到了c中的运算,老师说, 代码 b+=1就可以翻译为b=b+1呢,可是这个题, ...

b+=1和b=b+1平常也就一样,只不过此处,前者具有强制转换功能




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