Integer的兩種建立方式比較

2021-10-08 01:55:00 字數 1682 閱讀 2286

integer i1 =

newinteger

(127);

integer i2 =

newinteger

(127);

system.out.

println

(i1 == i2)

; system.out.

println

(i1.

equals

(i2)

);

結果為:false、true。

因為==運算子比較的是兩者位址,因為均是new出來的物件,在堆記憶體中兩者位址不同,故為false;equals()方法無論如何均是比較值大小,故為true。

integer i3 =

127;

integer i4 =

127;

system.out.

println

(i3 == i4)

; system.out.

println

(i3.

equals

(i4)

);

integer i5 =

128;

integer i6 =

128;

system.out.

println

(i5 == i6)

; system.out.

println

(i5.

equals

(i6)

);

結果卻為:false,true。

難道128 不等於128嗎?我們首先要知道,直接賦值等同於呼叫valueof方法,即等價於integer i = integer.valueof(128),然後我們不妨再檢視一下integer原始碼:

public

static integer valueof

(int i)

private

static

class

integercache

catch

( numberformatexception nfe)

} high = h;

cache =

newinteger

[(high - low)+1

];int j = low;

for(

int k =

0; k < cache.length; k++

) cache[k]

=new

integer

(j++);

// range [-128, 127] must be interned (jls7 5.1.7)

assert integercache.high >=

127;

}private

integercache()

}

可以看到**中含有-128和127的字樣,我們可以初步理解為:integer為我們定義了乙個緩衝池,將-128~127範圍內的值存放至緩衝池中,當直接賦值或呼叫valueof方法進行建立該範圍內的值時,會直接從緩衝池獲取值,無需在堆記憶體中開闢新空間;若不在範圍內,則需開闢新空間存放變數。

執行緒建立的兩種方式

建立執行緒的兩種方式 1.繼承thread並重寫方法,在run方法中定義執行緒要執行的任務 class mythread extends thread public class threaddemo1 2.實現runable介面並重寫run方法 class myrunnable implements...

陣列的兩種建立方式

var 陣列名 new array 定義了乙個空 的陣列 var array1 new array 定義了乙個長度為6的陣列 var array2 new array 6 輸出陣列的每個值都是 undefined console.log array2 可以直接定義陣列的具體值 var array3 ...

建立執行緒的兩種方式

thread thread new thread catch interruptedexception e system.out.println thread.currentthread getname system.out.println this.getname thread.start thr...