5 回答
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 引用同样的对象,后面不管通过谁来操作对象,它们还都是引用同一个对象,所以它们一直相同。
TA贡献1条经验 获得超0个赞
x!=y,特别明显啊 把x的值赋值给y之后 x又进行了一次自增运算 x++;
至于两个对象相等是因为用这种方式声明的sb2并没有分配到空间 而是指向sb1指向的空间 这块空间同时被sb1,sb2 指向。可以理解为一个人两个名字 再怎么变 他自己还是自己
有点类似C语言中指针的知识
TA贡献164条经验 获得超117个赞
第一个问题显示是 false 了,因为 Integer x = 400; Integer y = x; 在这里,x和y还是一个对象,但是后面又加了一个 x++,这时两者就不是一个对象啦。
第二个问题 是 true,你可以去查一下String和StringBuilder或者StringBuffer的区别,前者是会创建多个对象的,后者只会创建一个对象(节省资源啊)。比如 StringBuilder str = "Hello";StringBuilder str2 = "Hello World"; 是一个对象的。
添加回答
举报