天天看點

int與Integer1、int與integer的基本使用對比2、int與Integer的深入對比

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了。