1. 程式人生 > >關於Integer比較相等的問題

關於Integer比較相等的問題

作為一個菜雞,記下來免得忘了。

1.通過new出來的兩個Integer物件比較時,==是比較的物件地址,等同於一般物件比較的==,equals則會比較其內部的int值是否相等。因為內部重寫了equals方法:

public boolean equals(Object obj) {
    if (obj instanceof Integer) {
        return value == ((Integer)obj).intValue();
}
    return false;
}

2.不是通過new出來的兩個Integer物件比較時(Integer i=100或者Integer i=Integer.valueOf(100)

),當值處於-128-127之間(這個範圍是byte範圍),則會從快取中取值,所以值一樣的話,就會返回true。不在範圍內同1.

public static Integer valueOf(int i) {
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}
菜雞一枚,如果有錯誤之處,希望大佬指出來,謝謝。