int和Integer的區別

2022-09-23 15:51:06 字數 1463 閱讀 7765

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會快...