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