Integer使用==比較的問題 new一個對象 public Integer(int value) { this.value = value; } 自動裝箱 public static Integer valueOf(int i) { if (i >= IntegerCache.low && i ...
Integer使用==比較的問題
-
new一個對象
public Integer(int value) { this.value = value; }
-
自動裝箱
public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); }
-
自動拆箱
public int intValue() { return value; }
總結:
- int 和 int 比較,比較的是字面量的值,使用==始終是true
- int 和 integer 比較,由於 integer 會發生自動拆箱,也是true
- integer 和 integer 比較:
- 若兩個都是new出來的對象,則始終是false
- 若一個是new,一個是非new(包括字面量 || Integer.valueOf( )等),那麼一個是自動裝箱的對象,一個是new出來的對象,始終flase
- 兩個都不是new出來的,都會發生自動裝箱,就需要看值的範圍,在-128-127的範圍內,會獲取IntegerCache里的對象,這樣就是true,範圍外的還是false