2017-08-01 86 views
-8

公共類的測試{//名稱爲 「測試」這段代碼的輸出是什麼,爲什麼?請解釋MEE

static public void main(String[] args) 
{ 
    Long a=111L; //declaring Long type variable 
    Long b=111L; //declaring Long type variable 
    Long c=222L; //declaring Long type variable 
    Long d=222L; //declaring Long type variable 
    System.out.println((a==b)+" "+(c==d)); /*output is "true false". I dont know Why? Please explain */ 
} 

聲明類}

+2

你知道這不是你如何比較對象,對吧? –

+0

你有一個具體的問題,你有困惑的具體點?代碼本身是非常基本的,它只是比較一些對象並輸出比較結果。 – Zabuza

+0

[將兩個對象與.equals()和==運算符進行比較](https://stackoverflow.com/questions/13387742/compare-two-objects-with-equals-and-operator) – jmoerdyk

回答

4

Long是關於原始long的盒裝包裝。你應該使用long。 將基元與==進行比較,但將類似Long的對象與aLong.equals(otherLong)進行比較;否則,當您與==比較時,您將比較參考平等。 source

一個可能是真的,另一個是錯誤的原因是因爲-128到127被緩存了Source。因此,任何具有111L值的Long的對象都將是同一個對象,但具有222L值的Long將與另一個具有222L值的Long不同。

由於這種不確定性,您應該始終將對象與.equals進行比較,除非您特別想知道它們是否是完全相同的對象。

在這種情況下,我會建議你使用原語並比較原樣。

+1

我認爲你可以通過鏈接到SO上的一些答案來改善答案,其中解釋1)'等號'和'=='問題以及2)**自動裝箱**內容。 – Zabuza

+1

會做@Zabuza – Novaterata