5 回答

TA貢獻(xiàn)883條經(jīng)驗 獲得超454個贊
x 和 y 確實不相同。
Integer 這樣的類是相應(yīng)基本類型的 wrapper class,它和基本類型可發(fā)生自動轉(zhuǎn)換。
y = x 這句讓 y 和 x 引用同一個對象,這時它們是相同的。
但下一句 x++,自增運算符只用于基本類型,Integer 是沒有++方法的。這時就會發(fā)生自動轉(zhuǎn)換—— Integer 對象 unbox 出 int 值,自增后再 box 回 Integer 對象——這之后 x 就是另一個 Integer 對象了,不再和 y 相同。
所以關(guān)鍵是 x++ 這一句讓 x 的值改變了。
StringBuilder sb2 = sb1 這一句讓 sb2 和 sb1 引用同樣的對象,后面不管通過誰來操作對象,它們還都是引用同一個對象,所以它們一直相同。

TA貢獻(xiàn)13條經(jīng)驗 獲得超14個贊
第一個很簡單 x++;導(dǎo)致數(shù)值不一樣,
第二個為true,是因為他們hashCode是同一個值,所以不管他們數(shù)值怎么變化,都是true;

TA貢獻(xiàn)1條經(jīng)驗 獲得超0個贊
x!=y,特別明顯啊? 把x的值賦值給y之后 x又進(jìn)行了一次自增運算 x++;
至于兩個對象相等是因為用這種方式聲明的sb2并沒有分配到空間 而是指向sb1指向的空間 這塊空間同時被sb1,sb2 指向??梢岳斫鉃橐粋€人兩個名字? 再怎么變 他自己還是自己
有點類似C語言中指針的知識

TA貢獻(xiàn)164條經(jīng)驗 獲得超117個贊
第一個問題顯示是 false 了,因為 Integer x = 400; Integer y = x; 在這里,x和y還是一個對象,但是后面又加了一個 ?x++,這時兩者就不是一個對象啦。
第二個問題 是 true,你可以去查一下String和StringBuilder或者StringBuffer的區(qū)別,前者是會創(chuàng)建多個對象的,后者只會創(chuàng)建一個對象(節(jié)省資源?。?。比如 StringBuilder str = "Hello";StringBuilder str2 = "Hello World"; 是一個對象的。
添加回答
舉報