有時在我的代碼中,我必須檢查某個變量是否等於一個常量字符串。例如:Java平等檢查和調度算法
if (foo.equals("CONST")) {
stuff.do();
}
有時foo是null
所以我得到一個空指針異常。一個解決辦法是簡單的交換對象和參數周圍像這樣:
if ("CONST".equals(foo)) {
stuff.do();
}
我已閱讀,這是與Java作爲一個單一的調度語言做的,但我不明白爲什麼。如果foo
爲空,您將調用空對象的方法,導致空指針異常。它與單一派遣(或多派遣,動態派遣等)有什麼關係?這個問題與任何調度概念有關嗎?
你是不是調用一個空FOO的方法;你在一個String值爲「CONST」的非空實例上調用它。 equals方法的參數恰好爲null。 String的equals重載正確處理null參數。你讓它太複雜了 - 與派遣無關。 – duffymo
我不確定我是否理解這個問題。你在哪裏讀到Java是一個單一的調度語言,而不是在第二個代碼段中拋出'NullPointerException'? – Tunaki
@Tunaki對不起,我不確定這是很久以前。我最近又遇到了這個。 – Ogen