我已經wriiten這樣變量只能是空節目日食
public ArrayList<T> GetDoctorDetail(String name)
{
if (name!=null || !name.isEmpty() || name!="")
{
//Statements
}
}
但在日食名稱的方法通過下劃線用黃線顯示 空指針訪問:變量名只能是在這個空位置。
爲什麼?以及解決方案是什麼。
我已經wriiten這樣變量只能是空節目日食
public ArrayList<T> GetDoctorDetail(String name)
{
if (name!=null || !name.isEmpty() || name!="")
{
//Statements
}
}
但在日食名稱的方法通過下劃線用黃線顯示 空指針訪問:變量名只能是在這個空位置。
爲什麼?以及解決方案是什麼。
如果name
非空,條件||
運算符根本不會評估第二個操作數。所以只有第二個操作數可以被評估的情況是當name
爲空,在這種情況下它會拋出。
我懷疑你想
if (name != null && !name.isEmpty())
{
// Use name
}
或者可能:
if (name == null || name.isEmpty())
{
// Show an error message
}
注意與==
和!=
比較字符串是也幾乎都是錯誤的做法,因爲它比較引用。您通常會使用equals
。不僅如此,在這裏它也沒用 - 只有當它是空的時纔可以等於「」,所以它與第二個操作數的條件完全相同。
oR條件的第一部分只會在name = null時失敗。因此第二部分將拋出一個空指針異常。
編寫條件的正確方法是
if (name!=null && (!name.isEmpty() || name!=""))
if (name != null && !name.isEmpty()) {
// Now the name variable has valid content
}
注 - 邏輯總是更容易理解,如果你創建 「積極」 的檢查:
if (name == null || name.isEmpty()) {
// Now name is either null or empty
} else {
// Now the name has valid content
}
嘗試以避免檢查「否定」狀態的條件,如「不爲空」和「不爲空」。它們只不過是繞口令而已;)
您也可以刪除最後的條件,因爲isEmpty()檢查「」 – Deco 2012-03-23 06:21:56