2012-03-23 69 views
0

我已經wriiten這樣變量只能是空節目日食

public ArrayList<T> GetDoctorDetail(String name) 
{ 
    if (name!=null || !name.isEmpty() || name!="") 
    { 
     //Statements 
    } 
} 

但在日食名稱的方法通過下劃線用黃線顯示 空指針訪問:變量名只能是在這個空位置。

爲什麼?以及解決方案是什麼。

+0

您也可以刪除最後的條件,因爲isEmpty()檢查「」 – Deco 2012-03-23 06:21:56

回答

10

如果name非空,條件||運算符根本不會評估第二個操作數。所以只有第二個操作數可以被評估的情況是當name爲空,在這種情況下它會拋出。

我懷疑你想

if (name != null && !name.isEmpty()) 
{ 
    // Use name 
} 

或者可能:

if (name == null || name.isEmpty()) 
{ 
    // Show an error message 
} 

注意與==!=比較字符串是幾乎都是錯誤的做法,因爲它比較引用。您通常會使用equals。不僅如此,在這裏它也沒用 - 只有當它是空的時纔可以等於「」,所以它與第二個操作數的條件完全相同。

1

oR條件的第一部分只會在name = null時失敗。因此第二部分將拋出一個空指針異常。

編寫條件的正確方法是

if (name!=null && (!name.isEmpty() || name!="")) 
0
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 
} 

嘗試以避免檢查「否定」狀態的條件,如「不爲空」和「不爲空」。它們只不過是繞口令而已;)