黑马程序员技术交流社区

标题: 【测试】几行代码测试你对赋值语句的了解 [打印本页]

作者: Boiled_Water    时间: 2014-6-5 08:29
标题: 【测试】几行代码测试你对赋值语句的了解
*  以下代码哪个是正确的?为什么?
* 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;






作者: superob123    时间: 2014-6-5 08:49
c是对的,d应该也对
作者: 付江涛    时间: 2014-6-5 09:11
看看了哈
作者: 师在飞    时间: 2014-6-5 09:16
到底哪个对?
作者: wyy666    时间: 2014-6-5 09:20
a,c,d应该是这样
作者: Boiled_Water    时间: 2014-6-5 09:23
wyy666 发表于 2014-6-5 09:20
a,c,d应该是这样

嗯,就是这样
作者: Boiled_Water    时间: 2014-6-5 09:24
师在飞 发表于 2014-6-5 09:16
到底哪个对?

只有b是错误的,你看下我的分析,不足之处还望指出
作者: 师在飞    时间: 2014-6-5 09:26
看过了,分析的很详细,我看到题的时候也想错了
作者: 小草君    时间: 2014-6-5 09:30
只有B是错的,b+1是int类型
作者: 夏日蓝雪    时间: 2014-6-5 10:28
只有d对吧?还是都不对,不太确定。
作者: Boiled_Water    时间: 2014-6-5 10:30
夏日蓝雪 发表于 2014-6-5 10:28
只有d对吧?还是都不对,不太确定。

参考下我的分析
作者: 韩长征    时间: 2014-6-5 10:43
鲁克鲁克
作者: Hi天天向上    时间: 2014-6-5 10:46
让我想一想
作者: 夏日蓝雪    时间: 2014-6-5 10:46
Boiled_Water 发表于 2014-6-5 10:30
参考下我的分析

有一点还不太懂:为什么 b=b+1 不能通过编译,而b+=1 就能通过编译呢?根本原因是什么?虚拟机在执行它们的时候有什么不同?
作者: 黎志勇    时间: 2014-6-5 11:03
这点真是不太确定呢。
作者: heima_xyu    时间: 2014-6-5 12:21
A C D。就B错了吧

作者: 西门吹风    时间: 2014-6-5 12:46
选c,看一下答案
作者: f78fk    时间: 2014-6-5 13:11
acd是正确的
作者: 123_yaya    时间: 2014-6-5 13:13
看看。。
作者: EDDY_Liang    时间: 2014-6-5 15:28
C和D是对的
作者: 黄梁梦想享    时间: 2014-6-5 17:07
就C对,其他的都会让b自动提升转型为 int型的,因为C b+=1是直接赋值的 b还是byte型的
作者: 黄梁梦想享    时间: 2014-6-5 17:12
看来功力还是不够。继续努力
作者: 格子、    时间: 2014-6-5 18:28
正确答案是c,因为1是默认的int型,+=运算符会在底层进行类型的强制转换!
作者: shisaa    时间: 2014-6-5 19:13
只有b会报错。刚看到题目是也想错了。以为a也有问题。
作者: crazystraw    时间: 2014-6-5 19:21
学习一下
作者: pk49800    时间: 2014-6-5 20:30
b右边的运算会自动提升byte为int
作者: zhaojian    时间: 2014-6-5 21:18
看看!!
作者: blackstones1    时间: 2014-6-5 21:26
看来还是学的不够深入啊
作者: 赵文豪    时间: 2014-6-5 21:46
赶脚是c吧
作者: 热血青年    时间: 2014-6-5 22:09
B不对 损失精度
作者: 塔罗    时间: 2014-6-5 22:33
A是对的。两个常量相加减,编译器可以知道结果。如果结果不超过类型,就可以通过。
B不对。b是变量。编译的时候不能确定计算的结果。所以编译的时候会报错。
C对。 相当于 b = (byte)(b+1);q强制类型转化了就可通过了。
D不对把。应该和B一样。
作者: \(^o^)/    时间: 2014-6-5 23:12
* a. byte b = 1 + 1;     
     这个赋值是正确的,因为虽然右边的1默认的是int类型,但是当两个数值确定的时候相加的话只要不超过byte类型范围就可以编译通过。

* b. byte b = 1; b = b + 1;
      这个编译失败,因为在b=b+1中,b是byte类型的,而1是默认的int类型,b+1的值并不明确是否在byte范围内,所以编译会提示损失精度,如果想通过编译可以进行强转b=(int)(b+1),但可能损失精度。

* c. byte b = 1; b = b += 1;   
     这个编译通过,因为在+=赋值运算符中已经包含了强转功能。

* d. byte b = 1; b = ++b;

     这个编译通过,因为b的值确定了然后自增的话还在byte范围内,所以编译通过。




作者: 杨胜男    时间: 2014-6-6 07:54
a,c,d是正确的
作者: 王春涛    时间: 2014-6-6 08:06
acd 正确,有强转为byte类型,b 中 b为变量 int+1 结果为int 不能赋值给byte 大转小 编译失败。
作者: 姿_`态    时间: 2014-6-6 08:06
看看,我的确不大会
作者: 790324255a    时间: 2014-6-6 08:12
围        观
作者: ↘ふ紫铯幽夢    时间: 2014-6-6 08:19
a.cd对的、、、、、、
作者: 黄宝宝    时间: 2014-6-6 08:59
a:对的!b:类型提升了,是错的。c,对的,d:和b一样,
作者: xiazhixing    时间: 2014-6-6 09:04
学习学习
作者: 黄宝宝    时间: 2014-6-6 09:05
黄宝宝 发表于 2014-6-6 08:59
a:对的!b:类型提升了,是错的。c,对的,d:和b一样,

:'( 其实我是看错题了
作者: 790324255a    时间: 2014-6-6 09:10
路过 瞧下
作者: zly1992008    时间: 2014-6-6 09:41
看下你的分析
作者: Boiled_Water    时间: 2014-6-6 09:57
zly1992008 发表于 2014-6-6 09:41
看下你的分析

好的,不足这处还望指出
作者: 江祖贇    时间: 2014-6-6 10:32
只有b错   精度丢失  对吧
作者: Boiled_Water    时间: 2014-6-6 11:58
江祖贇 发表于 2014-6-6 10:32
只有b错   精度丢失  对吧

是的你对了
作者: kongyan4696    时间: 2014-6-6 12:14
看下。。
作者: 咪啪    时间: 2014-6-6 12:33
只有b错了,b+1变int了
作者: 观决    时间: 2014-6-6 13:54
看看看看看
作者: D.reamJA    时间: 2014-6-6 15:16
abd,看看答案:lol
作者: zhangle    时间: 2014-6-6 15:36
来看看详细的分析
作者: 江祖贇    时间: 2014-6-6 19:18
Boiled_Water 发表于 2014-6-6 11:58
是的你对了

兄弟  你的目标是哪一期
作者: Boiled_Water    时间: 2014-6-6 19:26
江祖贇 发表于 2014-6-6 19:18
兄弟  你的目标是哪一期

想去深圳38期,你呢
作者: 江祖贇    时间: 2014-6-6 19:34
Boiled_Water 发表于 2014-6-6 19:26
想去深圳38期,你呢

我也想啊  毕老师的视频我才看到 21天呢   技术分 又太少  真怕 赶不上       你呢
作者: sheng6699    时间: 2014-6-6 19:44
看看结果。。
作者: 285619273    时间: 2014-6-6 19:49
看答案!
作者: laibin2    时间: 2014-6-6 20:01
水水水水谁谁谁水水水水
作者: Boiled_Water    时间: 2014-6-6 21:11
江祖贇 发表于 2014-6-6 19:34
我也想啊  毕老师的视频我才看到 21天呢   技术分 又太少  真怕 赶不上       你呢 ...

重看高新技术,第一遍有几个地方没弄明白,加把劲应该行的,你现在走到哪个环节了
作者: 江祖贇    时间: 2014-6-6 21:17
Boiled_Water 发表于 2014-6-6 21:11
重看高新技术,第一遍有几个地方没弄明白,加把劲应该行的,你现在走到哪个环节了 ...

没你快  正在看毕老师的基础视频 才到21天  前面的容易忘记   真烦  没办法  还得继续努力
作者: Boiled_Water    时间: 2014-6-6 21:20
江祖贇 发表于 2014-6-6 21:17
没你快  正在看毕老师的基础视频 才到21天  前面的容易忘记   真烦  没办法  还得继续努力 ...

在学习的时候最好随手就把学到的知识点总结下来,不然到后面写技术blog是个痛苦
作者: 江祖贇    时间: 2014-6-6 21:33
Boiled_Water 发表于 2014-6-6 21:20
在学习的时候最好随手就把学到的知识点总结下来,不然到后面写技术blog是个痛苦 ...

我现在  深刻的感受到了   好奇,你  毕老师的视频看过几遍啊  不会忘记吗
作者: Boiled_Water    时间: 2014-6-6 21:51
江祖贇 发表于 2014-6-6 21:33
我现在  深刻的感受到了   好奇,你  毕老师的视频看过几遍啊  不会忘记吗 ...

just once 忘了再回去看
作者: 韩天雷    时间: 2014-6-7 00:01
瞧一瞧 看一看
作者: yang1352546    时间: 2014-6-7 00:19
acd都是对的
作者: 附耳细说    时间: 2014-6-7 02:04
cd是对的
作者: 无人海    时间: 2014-6-7 02:11
yingaishi cd
作者: 清规欲    时间: 2014-6-7 11:47
我也有这道题
作者: 倪大大    时间: 2014-6-7 12:16
a c d吧应该
作者: Solomon    时间: 2014-6-7 12:25
这基础题里我做过!!
作者: 来男.    时间: 2014-6-7 14:05
c正确,+=可以墙砖
作者: yinxjfly    时间: 2014-6-7 14:14
鉴定完毕!只有C和D!
作者: yinxjfly    时间: 2014-6-7 14:22
A也是对的(刚才看错了)!
A:   byte b = 1+1  正确   定义byte类型的变量时,会自动将右边的数值自动完成了强转。
B:   byte b = 1; b = b+1;  编译失败,错误。这是数据类型类型转换,b是byte型,1默认是int类型的,运算
                                                              结果是int类型的,赋值给byte类型的b变量可能损失精度。
               
C:   byte b = 1; b = b+= 1; 正确。首先b+=1中+=运算符在给b赋值时,自动完成了强转动作,最后将运算后的b赋值给了b。
               
D:   byte b = 1; b = ++b; 正确。首先运算++b,该运算时先将b+1的结果赋值给b,在赋值的过程中自动完成了强转操作。



作者: 依然阿邦    时间: 2014-6-7 14:54
看看~~~~~
作者: yanghu    时间: 2014-6-7 15:36
学习学习,不放过任何机会。
作者: 李维奥    时间: 2014-6-7 16:08
看下分析

作者: never615    时间: 2014-6-15 20:27
哈哈哈哈哈
作者: babyxuhuan    时间: 2014-6-15 20:54
好题,看看
作者: Alan_Kwan    时间: 2014-6-15 21:10
目测b答案编译失败,其他都正确,看看答案
作者: Alan_Kwan    时间: 2014-6-15 21:12
夏日蓝雪 发表于 2014-6-5 10:46
有一点还不太懂:为什么 b=b+1 不能通过编译,而b+=1 就能通过编译呢?根本原因是什么?虚拟机在执行它们 ...

+=是一个操作符
作者: 2528870651    时间: 2014-6-15 22:41
不错哦

作者: 华子    时间: 2014-6-15 22:59
A和D是对的
作者: 夏日蓝雪    时间: 2014-6-15 23:15
嗯嗯,you are right.
作者: qincai    时间: 2014-6-15 23:45
细节啊又是细节······
作者: wssjdysf    时间: 2014-6-16 00:03
看     看
作者: 锦宁    时间: 2014-6-16 00:25
看看我赋值语句的了解有多少吧!!!
作者: 师偃    时间: 2014-6-16 01:55
aaaaaaaaaaaaaaaaaaa,其他三个都有可能超出byte范围
作者: 师偃    时间: 2014-6-16 01:56
好吧,涨姿势了。。。
作者: 老子就是坑    时间: 2014-6-16 07:05
求看题、对这个问题挺感兴趣
作者: 老子就是坑    时间: 2014-6-16 07:12
ACD是正确的,B选项:1默认的int型,就是说把一个int型的数据赋给了byte,超出了byte类型表示的数据范围,是不能通过编译的。
作者: 不去会死    时间: 2014-6-16 08:17
我就看看
作者: 老梁    时间: 2014-6-16 08:24
围观看看
作者: pisces    时间: 2014-6-16 08:26
我也围观
作者: 18353666072    时间: 2014-6-16 09:01
我咋感觉是cd呢,,这不是基础题么????

作者: 从未有过的晴天    时间: 2014-6-16 09:32
a正确
b编译失败
c编译通过
d编译通过
作者: 叶飞翔    时间: 2014-6-16 09:55
我去,我基础测试的时候就有这个题,还是第一题呢。我以为是单选,判断加推测,感觉只有A是对的。。。看来我挂了啊
作者: 沐子松/kf    时间: 2014-6-16 09:56
来学习         
作者: 叶飞翔    时间: 2014-6-16 09:58
看了你的解释,明白了好多,给跪了啊,大神啊。
作者: wojiaojay    时间: 2014-6-16 10:44
看看自己想的对不对
作者: youcyou    时间: 2014-6-16 10:51
看看     
作者: a6217815    时间: 2014-6-16 11:18
C D 知道是对的,但是A就不清楚了,B确定是 错的,先看一下LZ的 分析吧
作者: L.sam    时间: 2014-6-16 11:26
D正确。其他三项都是byte1+int1




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