为了账号安全,请及时绑定邮箱和手机立即绑定

请问这题的答案为什么是C?

请问这题的答案为什么是C?

very_well 2017-09-21 22:07:42
查看完整描述

5 回答

已采纳
?
onemoo

TA贡献883条经验 获得超454个赞

  • x 和 y 确实不相同。

    Integer 这样的类是相应基本类型的 wrapper class,它和基本类型可发生自动转换。

    y = x 这句让 y 和 x 引用同一个对象,这时它们是相同的。

    但下一句 x++,自增运算符只用于基本类型,Integer 是没有++方法的。这时就会发生自动转换—— Integer 对象 unbox 出 int 值,自增后再 box 回 Integer 对象——这之后 x 就是另一个 Integer 对象了,不再和 y 相同。

    所以关键是 x++ 这一句让 x 的值改变了。

  • StringBuilder sb2 = sb1 这一句让 sb2 和 sb1 引用同样的对象,后面不管通过谁来操作对象,它们还都是引用同一个对象,所以它们一直相同。

查看完整回答
3 反对 回复 2017-09-21
?
我埋藏的东西你别挖

TA贡献13条经验 获得超14个赞

第一个很简单 x++;导致数值不一样,

第二个为true,是因为他们hashCode是同一个值,所以不管他们数值怎么变化,都是true;//img1.sycdn.imooc.com//59c4bfdf0001ed7607910453.jpg

查看完整回答
反对 回复 2017-09-22
?
慕粉2002042513

TA贡献1条经验 获得超0个赞

x!=y,特别明显啊  把x的值赋值给y之后 x又进行了一次自增运算 x++;

至于两个对象相等是因为用这种方式声明的sb2并没有分配到空间 而是指向sb1指向的空间 这块空间同时被sb1,sb2 指向。可以理解为一个人两个名字  再怎么变 他自己还是自己

有点类似C语言中指针的知识

查看完整回答
反对 回复 2017-09-22
?
言曌博客liuyanzhao_com

TA贡献164条经验 获得超116个赞

第一个问题显示是 false 了,因为 Integer x = 400; Integer y = x; 在这里,x和y还是一个对象,但是后面又加了一个  x++,这时两者就不是一个对象啦。

第二个问题 是 true,你可以去查一下String和StringBuilder或者StringBuffer的区别,前者是会创建多个对象的,后者只会创建一个对象(节省资源啊)。比如 StringBuilder str = "Hello";StringBuilder str2 = "Hello World"; 是一个对象的。

查看完整回答
反对 回复 2017-09-21
?
慕粉1471134825

TA贡献29条经验 获得超9个赞

看不清。。。

查看完整回答
反对 回复 2017-09-21
  • 5 回答
  • 0 关注
  • 1880 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信