日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Integer与int的种种比较你知道多少?[转]

發布時間:2024/4/13 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Integer与int的种种比较你知道多少?[转] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

 轉載:http://www.cnblogs.com/liuling/archive/2013/05/05/intAndInteger.html

如果面試官問Integer與int的區別:估計大多數人只會說道兩點,Ingeter是int的包裝類,int的初值為0,Ingeter的初值為null。但是如果面試官再問一下Integer i = 1;int ii = 1; i==ii為true還是為false?估計就有一部分人答不出來了,如果再問一下其他的,估計更多的人會頭腦一片混亂。所以我對它們進行了總結,希望對大家有幫助。

  首先看代碼:

package?com.test; /***?*?@author?劉玲**/ public?class?TestInteger?{/***?@param?args*/public?static?void?main(String[]?args)?{int?i?=?128;Integer?i2?=?128;Integer?i3?=?new?Integer(128);//Integer會自動拆箱為int,所以為trueSystem.out.println(i?==?i2);System.out.println(i?==?i3);System.out.println("**************");Integer?i5?=?127;//java在編譯的時候,被翻譯成->?Integer?i5?=?Integer.valueOf(127);Integer?i6?=?127;System.out.println(i5?==?i6);//true/*Integer?i5?=?128;Integer?i6?=?128;System.out.println(i5?==?i6);//false */????????Integer?ii5?=?new?Integer(127);System.out.println(i5?==?ii5);?//falseInteger?i7?=?new?Integer(128);Integer?i8?=?new?Integer(123);System.out.println(i7?==?i8);??//false}}

首先,17行和18行輸出結果都為true,因為Integer和int比都會自動拆箱(jdk1.5以上)。

22行的結果為true,而25行則為false,很多人都不動為什么。其實java在編譯Integer i5 = 127的時候,被翻譯成-> Integer i5 = Integer.valueOf(127);所以關鍵就是看valueOf()函數了。只要看看valueOf()函數的源碼就會明白了。JDK源碼的valueOf函數式這樣的:

?public?static?Integer?valueOf(int?i)?{????????assert?IntegerCache.high?>=?127;if?(i?>=?IntegerCache.low?&&?i?<=?IntegerCache.high)????????????return?IntegerCache.cache[i?+?(-IntegerCache.low)];return?new?Integer(i);????}

看一下源碼大家都會明白,對于-128到127之間的數,會進行緩存,Integer i5 = 127時,會將127進行緩存,下次再寫Integer i6 = 127時,就會直接從緩存中取,就不會new了。所以22行的結果為true,而25行為false。

對于27行和30行,因為對象不一樣,所以為false。

我對于以上的情況總結如下:

? ①無論如何,Integer與new Integer不會相等。不會經歷拆箱過程,i3的引用指向堆,而i4指向專門存放他的內存(常量池),他們的內存地址不一樣,所以為false
??②兩個都是非new出來的Integer,如果數在-128到127之間,則是true,否則為false
??java在編譯Integer i2 = 128的時候,被翻譯成-> Integer i2 = Integer.valueOf(128);而valueOf()函數會對-128到127之間的數進行緩存
??③兩個都是new出來的,都為false
??④int和integer(無論new否)比,都為true,因為會把Integer自動拆箱為int再去比

?

如果大家覺得有什么不對的地方,歡迎指示。


轉載于:https://my.oschina.net/chenfwind/blog/499221

總結

以上是生活随笔為你收集整理的Integer与int的种种比较你知道多少?[转]的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。