今天有個學弟問了我乙個面試題:
integer a = 128;輸出什麼?為什麼?說來慚愧,我的直覺告訴我會輸出flase,但突然間還想不出來為什麼。。所以寫了個例子研究了下:integer b = 128;
system.out.println(a == b);
public結果輸出:static
void
main(string args)
true這裡前兩個和後兩個都很好理解,就不說了,第三個也就是開頭提出的那個問題,輸出flase說明i3和i4是兩個不同的物件。然後debug看了一下:true
false
false
false
為什麼一樣的值也沒有使用new但是物件卻有兩個呢,在網上查了下找到了答案:
integer i3 = 128; 實際上執行了 integer i3 = integer.valueof(128);
public也就是說,對於-128到127之間的數,integer會進行快取,比如:integer x = 127時,會將127進行快取,下次integer y = 127時,就會直接從快取中取,就不會new了,所以x和y是同乙個物件。static integer valueof(int
i)
但是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...