Integer類在自動裝箱後,用==來做比較時,並不總是像其他類一樣比較對象地址,數值較小時,它比較的是對象值。
當數值超過某個臨界點時,它纔會比較地址。這個臨界點是127和-128。
假設有如下代碼:
Java代碼
Integer i1 = 127;
Integer i2 = 127;
if (i1 == i2)
System.out.println("i1 == i2");
else
System.out.println("i1 != i2");
那麼輸出結果是i1 == i2,比較的是對象值。
如果:
Java代碼
Integer i1 = 128;
Integer i2 = 128;
if (i1 == i2)
System.out.println("i1 == i2");
else
System.out.println("i1 != i2");
則會輸出i1 != i2,比較的是對象地址。
設計者的思路大概是,用==來進行比較,大概一般都是要比較值,但這種寫法是不對的,這樣吧,當對象值在一個字節以內時,比較值和比較地址的成 本是一樣的,那我就給你比較值,但如果值大於一個字節,比較值的成本就大過比較地址了,我就老老實實比較地址吧