int與integer的區(qū)別

區(qū)別:

1、Integer是int的包裝類,int則是java的一種基本數據類型?

2、Integer變量必須實例化后才能使用,而int變量不需要?

3、Integer實際是對象的引用,當new一個Integer時,實際上是生成一個指針指向此對象;而int則是直接存儲數據值?

4、Integer的默認值是null,int的默認值是0


Integer? int? 不同情況下的比較 :

1、new?Integer() -?new?Integer() 比較

由于Integer變量實際上是對一個Integer對象的引用,所以兩個通過new生成的Integer變量永遠是不相等的(因為new生成的是兩個對象,其內存地址不同)。

Integer i = new Integer(99);

Integer j = new Integer(99);

System.out.print(i == j); ????????????//false

2.new?Integer() - int 比較

Integer變量和int變量比較時,只要兩個變量的值是向等的,則結果為true

(因為包裝類Integer和基本數據類型int比較時,java會自動拆包裝為int,然后進行比較,實際上就變?yōu)閮蓚€int變量的比較)

Integer i = new Integer(99);

int j = 99;

System.out.print(i == j); ????????????//true?

3.非new Integer? -? new Integer()? ? ? 比較

非new生成的Integer變量和new Integer()生成的變量比較時,結果為false。

(因為非new生成的Integer變量指向的是java常量池中的對象,而new Integer()生成的變量指向堆中新建的對象,兩者在內存中的地址不同)

Integer i = new Integer(99);

Integer j = 99;

System.out.print(i == j);???????????? //false

4.非new Integer? -? 非new Integer? ? 比較

-128到127之間的數? true

其他數值? ?false

Integer i = 99;

Integer j = 99;

System.out.print(i == j); //true?


Integer i = 128;

Integer j = 128;

System.out.print(i == j); //false

java在編譯Integer i = 100 ;時,會翻譯成為Integer i = Integer.valueOf(100);,而java API中對Integer類型的valueOf的定義如下:

java對于-128到127之間的數,會進行緩存,Integer i = 127時,會將127進行緩存,下次再寫Integer j = 127時,就會直接從緩存中取,就不會new了

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);

}

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容