2013/02/04

關於Java裡Integer類別的==

我們都知道,在Java中的==比較的是"物件"的參照是否相等,並不會自動使用物件本身的值做比較。

但當Integer這個類別被使用到時,其-127~128的值會先被Integer類別給cache住,也因此若在Integer類別上使用==時,不同的參照方式在不同範圍內的值會有不同的結果。

直接assign,或是使用Integer.valueOf(int)的時候,在-127~128內的值會參照到同樣的物件,也就是==會比較到相同的物件。

使用new Integer(int)的方式時,因為各別產生新的物件,因此比較的會是不同物件。

其他wrapper classes(Byte, Short, Long, Character)也有相同的cache機制,cache的範圍各不相同,Float則沒有此機制。
另外BigDecimal也有此機制,範圍為0~10。

參考來源:
  Immutable Objects / Wrapper Class Caching

沒有留言:

張貼留言