new Integer 、Integer.parseInt() 和 Integer.valueOf()

Integer類有一個靜態緩存,存儲了256個特殊的Integer對象——每個對象分別對應`-128 和127之間的一個值。
有了這個概念,就可以知道上面三行代碼之間的區別。

new Integer(123);

顯示創建了一個新的Integer對象。

Integer.parseInt("123");

解析完字符串後返回一個int值。

Integer.valueOf("123");

這種情況比其他的要更復雜一些。首先進行了字符串解析,然後如果解析的值位於-128127之間,就會從靜態緩存中返回對象。如果超出了這個範圍,就會調用Integer()方法並將解析的值作爲參數傳入,得到一個新的對象。

現在,讓我們看一下問題中的3個表達式。

Integer.valueOf("127")==Integer.valueOf("127");

上面的表達式返回true,因爲Integer的值從靜態緩存中取了2次,表達式返回了對象與自己比較的結果。因爲只有一個Integer對象,所以返回結果爲true

Integer.valueOf("128")==Integer.valueOf("128");

上面的表達式返回false,因爲128沒有存在靜態緩衝區。所以每次在判斷相等時等式兩邊都會創建新的Integer對象。由於兩個Integer對象不同,所以==只有等式兩邊代表同一個對象時纔會返回true。因此,上面的等式返回false

Integer.parseInt("128")==Integer.valueOf("128");

上面的表達式比較的是左邊的原始int128與右邊新創建的Integer對象。但是因爲intInteger之間比較是沒有意義的,所以Java在進行比較前會將Integer自動拆箱,所以最後進行的是intint值之間的比較。由於128和自己相等,所以返回true

補充說明:
只適應於jdk7或以上版本,因爲jdk6jdk7的Integer具體實現有差別,詳情可查看下源代碼.

http://www.importnew.com/9162.html

發佈了14 篇原創文章 · 獲贊 7 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章