相信大家得出的答案都是 false true
但是在這裏我壹定要說,這個答案不是絕對的 c==d 壹定是true,但是a==b 卻不壹定就是false ,也有可能是true。
但是我得到的值是 true,true 如果不相信的同學或者抱有懷疑的同學請往下看!
我們首先要明白 通常情況下為什麽答案會是 false,true。
Integer c = 1000 實際在內部做了 Integer c = Integer.valueOf(100) 的操作。我們來看壹下 Integer.class 的源碼
從上面的代碼中可以看到,當 i >= IntegerCache.low && i <= IntegerCache.high 的時候會從cache數組裏直接取值,否則new壹個新的Integer對象
從上面的 Integer.class 源碼中 可以看出,low的默認值是-128,high的值與 integerCacheHighPropValue 有關,
當我們未對vm中的Integercache進行設置的時候其莫認真是127,cache數組也就是從-128到127,這也就不難理解為什麽
在開文時提到的經典面試題的結果會是false 和 true,之所以我後面強調不壹定,就是因為當 ntegerCacheHighPropValue 不為null的時候取決於jvm中的設置,
在eclipse中我們可以做這樣的操作:
這時候再來執行那段代碼,妳就會得到結果是 true和true,下次誰再問妳這樣的問題,可以大聲的告訴他不壹定,實力裝13壹波!