Integer a = 1000, b = 1000;
System.out.println(a == b);
Integer c = 100, d = 100;
System.out.println(c == d)
如果你運行上面代碼
你將會得到下面的結果
false
true
據我們所知,如果兩個引用指向同一個對象的時候,我們把兩個對象用==進行比較,得到的結果是true.
反之,如果兩個引用指向的不是同一個對象,那麼==就不成立,即使這兩個引用內容是一樣的。
我們查看Integer.java類,你會找到IntegerCache.java這個內部私有類。它爲-128到127之間的所有整數對象都提供緩存。
如果值在-128到127之間,就會返回該緩存的實例,兩者指向同樣的對象。
接下來你可能會問,爲什麼會爲-128到127之間的所有整數設置緩存
這是因爲這個範圍內的小數值整數在日常生活中使用頻率比其他的大的多,多次使用相同的底層對象這一特性可以通過該設置進行有效的內存優化。