int與Integer目錄
- 1、int與integer的基本使用對比
- 2、int與Integer的深入對比
1、int與integer的基本使用對比
(1)Integer是int的包裝類;int是基本資料類型;
(2)Integer變量必須執行個體化後才能使用;int變量不需要;
(3)Integer實際是對象的引用,指向此new的Integer對象;int是直接存儲資料值 ;
(4)Integer的預設值是null;int的預設值是0。
2、int與Integer的深入對比
(1)由于Integer變量實際上是對一個Integer對象的引用,是以兩個通過new生成的Integer變量永遠是不相等的(因為new生成的是兩個對象,其記憶體位址不同)。
Integer i = new Integer(100);
Integer j = new Integer(100);
System.out.print(i == j); //false
(2)Integer變量和int變量比較時,隻要兩個變量的值是相等的,則結果為true(因為包裝類Integer和基本資料類型int比較時,java會自動拆包裝為int,然後進行比較,實際上就變為兩個int變量的比較)
Integer i = new Integer(100);
int j = 100;
System.out.print(i == j); //true;i會被拆裝成為int類型
(3)非new生成的Integer變量和new Integer()生成的變量比較時,結果為false。(因為非new生成的Integer變量指向的是java常量池中的對象,而new Integer()生成的變量指向堆中建立的對象,兩者在記憶體中的位址不同)
Integer i = new Integer(100);
Integer j = 100;
System.out.print(i == j); //false
(4)對于兩個非 new 生成的 Integer 對象,進行比較時,如果兩個變量的值在區間 -128 到 127 之間,則比較結果為 true,如果兩個變量的值 不在此區間,則比較結果為 false
Integer i = 100;
Integer j = 100;
System.out.print(i == j); //true
Integer i = 128;
Integer j = 128;
System.out.print(i == j); //false
對于第 4條的原因: java在編譯 Integer i = 100 ;時,會翻譯成為 Integer i = Integer.valueOf(100)。而 java API中對 Integer類型的 valueOf的定義如下,對于 -128到 127之間的數,會進行緩存,Integer i = 127時,會将 127進行緩存,下次再寫 Integer j = 127時,就會直接從緩存中取,就不會 new了。