2017-02-23 56 views
2
public void printManagerAvailable(Manager mgr) { 
    System.out.println(" Is Manager object available : " + mgr!=null); 
} 

輸出:打印對象並檢查空

true 

爲什麼產量只有true這裏?我期待:

Is Manager object available : true 
+0

我不不想打印管理員。我只想知道Manager是否爲空或日誌中可用。我用String.valueOf(mgr)給了我預期的輸出。 「管理器對象是否可用:是」。我想理解爲什麼我只打印「System.out.println(」是管理器對象可用:「+ mgr!= null);」 –

回答

5

,因爲它認爲你說的是​​" Is Manager object available : " + mgr所有的!= null左側。換句話說,它首先執行" Is Manager object available : " + mgr,然後再比較" Is Manager object available : [Object:Manager]" != null

這樣做。

Manager mgr = new Manager(); 
    mgr.setChangeClass(5); 
    mgr.setChangeClockIn(10); 
    System.out.println(" Is Manager object available : " + (mgr!=null)); 
+0

@Venkata Pavan從那以後呢? – MakPo

+0

謝謝,真的有幫助。 –

+0

您期望它將字符串與布爾輸出的結果連接起來,但它會從左到右讀取它,因此它看到的第一件事是「」Manager對象可用:「+ mgr」。所以它會嘗試將字符串和Manager對象連接成一個新的字符串。然後它接受這個新的字符串並檢查它不是「空」。 'new_string!= null'的結果是'true'。這就是爲什麼它只返回「真」。 – MakPo

-1

嘗試使用這行代碼。

System.out.println(" Is Manager object available : " + (mgr == null ? "is null" : "not null")); 
+1

他希望結果是以太「是管理器對象可用:真」或「是管理器對象可用:假」。只需將'mgr!= null'放入括號就可以實現。 – MakPo

1

其他答案蓋發生了什麼,這就是爲什麼它正在發生的事情:

operator precedence Java中的順序提出另外,+,提前平等,!=的。

重要的是要認識到這不是由從左到右的順序造成的。

所以,你必須是應用運營商在訂單像這樣的內容:

("Is null : " + mgr) != null 

並修復它,你可以用括號來強制優先級的其他方式:

"Is null : " + (mgr != null) 
+0

謝謝,我已經得到你。我知道,當經理初始化它永遠不會返回上面的錯誤。我只是拿它作爲例子。 –

+0

@VenkataPavan好了,我調整了你的例子,刪除了與你的問題無關的行,並使它成爲可能,它可能是'null'。 – weston