int和Integer的區別

2021-07-27 18:17:13 字數 1206 閱讀 2835

今天有個學弟問了我乙個面試題:

integer a = 128;

integer b = 128;

system.out.println(a == b);

輸出什麼?為什麼?說來慚愧,我的直覺告訴我會輸出flase,但突然間還想不出來為什麼。。所以寫了個例子研究了下:

public

static

void

main(string args)

結果輸出:

true

true

false

false

false

這裡前兩個和後兩個都很好理解,就不說了,第三個也就是開頭提出的那個問題,輸出flase說明i3和i4是兩個不同的物件。然後debug看了一下:

為什麼一樣的值也沒有使用new但是物件卻有兩個呢,在網上查了下找到了答案:

integer i3 = 128; 實際上執行了 integer i3 = integer.valueof(128);

public

static integer valueof(int

i)

也就是說,對於-128到127之間的數,integer會進行快取,比如:integer x = 127時,會將127進行快取,下次integer y = 127時,就會直接從快取中取,就不會new了,所以x和y是同乙個物件。

但是integer z = 128時,會直接返回new integer(128),下次integer w = 128時也直接返回new integer(128),所以z和w不是同乙個物件。

最後,總結一下這類題目:

1.無論何時,integer與new integer不會相同,不會經歷拆箱過程,如例子中的i3的引用指向專門存放它的記憶體(常量池),而i4的引用指向堆,他們的記憶體位址不一樣

2.無論何時,兩個都是new出來的,都不是同乙個物件

3.兩個都是非new出來的integer,如果數在-128到127之間,則是true,否則為false,上面例子解釋過了

4.int 和 integer(無論是不是new出來的)比,會把integer自動拆箱為int再去比,這個時候比較的是數值,數值一樣都為true

Integer 和int的區別

1.int是基本的資料型別,直接存數值 2.integer是int的封裝類 integer 是物件,用乙個引用指向這個物件 integer 是乙個類,是int的擴充套件,定義了很多的轉換方法。3.int和integer都可以表示某乙個數值 4.int和integer不能夠互用,因為他們兩種不同的資料...

int 和 Integer 的區別

int 和 integer 的區別 1 integer是int的包裝類 2 integer是類,預設值是null int是基礎資料型別,預設值是0.3 integer表示的是物件,用乙個引用指向這個物件 而int是基本資料型別,直接儲存數值。integer類在 128到127的快取問題 即jvm會快...

int 和 Integer 的區別

int是基本資料型別。不需要例項化。直接儲存資料值,資料儲存在常量池。預設為0。int a 1000 integer是int的包裝型別。要例項化。是物件的引用,要重新分派儲存位置,有指向 類似指標 和儲存位置兩個屬性。預設為null。integer b new integer 1000 1,inte...