int和integer的區別
1、integer是int的包裝類,int則是j**a的一種基本資料型別
2、integer變數必須例項化後才能使用,而int變數不需要
3、integer實際是物件的引用,當new乙個integer時,實際上是生成乙個指標指向此物件;而int則是直接儲存資料值
4、integer的預設值是null,int的預設值是0
延伸:關於integer和int的比較
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比較時,j**a會自動拆包裝為int,然後進行比較,實際上就變為兩個int變數的比較)
integer i = new integer(100);
int j = 100;
system.out.print(i == j); //true
3、非new生成的integer變數和new integer()生成的變數比較時,結果為false。(因為非new生成的integer變數指向的是j**a常量池中的物件,而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條的原因:
j**a在編譯integer i = 100 ;時,會翻譯成為integer i = integer.valueof(100);,而j**a api中對integer型別的valueof的定義如下:
public static integer valueof(int i)
return new integer(i);
}j**a對於-128到127之間的數,會進行快取,integer i = 127時,會將127進行快取,下次再寫integer j = 127時,就會直接從快取中取,就不會new了
Integer 和int的區別
1.int是基本的資料型別,直接存數值 2.integer是int的封裝類 integer 是物件,用乙個引用指向這個物件 integer 是乙個類,是int的擴充套件,定義了很多的轉換方法。3.int和integer都可以表示某乙個數值 4.int和integer不能夠互用,因為他們兩種不同的資料...
int和Integer的區別
今天有個學弟問了我乙個面試題 integer a 128 integer b 128 system.out.println a b 輸出什麼?為什麼?說來慚愧,我的直覺告訴我會輸出flase,但突然間還想不出來為什麼。所以寫了個例子研究了下 public static void main strin...
int 和 Integer 的區別
int 和 integer 的區別 1 integer是int的包裝類 2 integer是類,預設值是null int是基礎資料型別,預設值是0.3 integer表示的是物件,用乙個引用指向這個物件 而int是基本資料型別,直接儲存數值。integer類在 128到127的快取問題 即jvm會快...