java中Integer在JDK1.6和JDK1.7中的區別


運行下面這段代碼:

System.out.println(Integer.valueOf("127")==Integer.valueOf("127"));
System.out.println(Integer.valueOf("128")==Integer.valueOf("128"));
System.out.println(Integer.parseInt("128")==Integer.valueOf("128"));

JDK1.6輸出結果:

false
false
true

 JDk1.7輸出結果:

true
false
true

 下面來研究一下為什么會出現這種情況。

JDk1.7中Integer源碼中valueOf方法:

第一步:

第二步:

第三步:

可以發現,valueOf會返回一個Integer(整型)對象,當被處理的字符串在-128和127(包含邊界)之間時,返回的對象是預先緩存的。

可以得出:

第一行的調用返回true,這個整型對象127是被緩存的

第二行的調用返回false是因為128沒有被緩存。

JDk1.6中Integer源碼中valueOf方法:

第一步:

 

第二步:

可以發現,valueOf無論大小都會返回一個new 的 新的Integer(整型)對象,所以都不一樣。

可以得出:

第一行的調用返回false,返回一個新的Integer(整型)對象

第二行的調用返回false,,返回一個新的Integer(整型)對象。

第三行的方法Integer.parseInt(String),這個方法反回的int

對應的Integer源碼如下:

比較操作符使用了==同時等號的兩邊存在一個int型和一個Integer對象的引用時,Java在進行比較前會將Integer自動拆箱,所以最后進行的是int和int值之間的比較。

即:128==128,返回true。

小結:JDK1.7版本開始,Integer有了靜態緩存,這點注意一下。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM