2009-10-07 32 views
2

OMG。我有一個小項目要做,而絃樂隊正在殺死我!字符串表示它不爲空,但後來拋出NullPointerException

現在,我有一個字符串,它是null(取自調用getParameter()從一個servlet的值)。

問題是,我試圖看看它是否爲空,即使它爲空,在程序中告訴我這不是null,但後來在程序中,當我使用該變量時,我收到一個異常說變量是null

System.out.println("In " + ID); // in console: In null 
    if ((ID == null) || (ID == "null") || ID.equals(null) || **ID.equals("null")**) 
    { 

     // after I put the 4th condition, the if is working right (WHAT IS THE PROBLEM?)    
     System.out.println("==null"); 
     this.ID = ""; 
    } 
    else 
    { 
     System.out.println("!=null"); 
     this.ID = ID; 
    } 
    System.out.println("After " + ID); 

我在做什麼錯了?

只有第四種情況正在發揮作用!其餘的(除了第二個,因爲我把它放在因爲我絕望)的條件

我教ID == nullID.equals(null)會好的,但沒有。

編輯: 問題是,我從窗體(形式1讓我們說,通常)獲取ID的值。但在這種情況下,我使用的表單2沒有任何ID輸入,因此ID必須是null而不是"null"

回答

5

既然你從一個servlet獲得字符串,我可以說這是正常的。

Java在某些條件下將空字符串轉換爲「空」字符串。

顯然,您檢索字符串不是空值,但它是一個4個字符字符串「null」

你爲什麼不嘗試調試?或者只是看看是否能返回:

System.out.println("Length of ID: " + ID.Length); 

編輯:如果你沒有得到例外這裏,這意味着該字符串不爲空,也輸出「的ID長度:4」將意味着字符串真的ID =「null」

EDIT2:好吧,似乎有些人不明白這裏發生了什麼,他們說如何在Java的某些條件下空字符串「null」?他們發現它riddiculus。我喜歡他們試試這個關於java:

String abc = null; 
String xyz = "hello"; 
System.out.println(xyz + abc); 

輸出將是「hellonull」沒有別的......

而且我們在這裏有一個servlet。有一個空數據。 Servlet發送null數據爲「null」,它應該怎麼做?一個空字符串?來吧!!! 「

+0

是的,你是儀式,id變量包含「null」。附: 1.感謝所有人告訴不要使用「==」,並且該變量包含「null」。 –

2

看起來像是返回字符串「null」而不是空對象。

+2

您的意思是一個空*參考*,它是一個值, t指任何*對象。 –

+0

問題是,我從表單獲得** ID **的值(**表單1 **)。 但在這種情況下,我使用**表單2 **,它沒有任何ID輸入。 –

+0

@Skeet當然,我可以看到這可能會令人困惑... – Gandalf

10
ID.equals("null") 

顯然,ID包含四個字母串"null"。所以它不是null(「nothing」的值)。

有關更多關於null常數的信息,請參見Java glossary。如果它沒有引用任何對象,基本上變量的值爲null。然而,字符串"null"的一個對象,即類String的一個實例,並且在這種情況下,變量ID引用該對象。

(注意,按照約定的Java變量以小寫字母開頭,像ID縮略詞被寫入完全小寫,所以寫id而不是ID。)

0

如果結果竟是空,則

ID == null 

就足夠了,但正如所提到的,ID的字符串值顯然是「null」而不是null對象。

比較字符串時,而不是使用== 這個博客介紹了更多關於他的你應該使用.equals: http://blog.enrii.com/2006/03/15/java-string-equality-common-mistake/

所以,「空」不等於空,在Java。

6

以下是您嘗試過的四項測試。第一個和第四個是你唯一需要的。

  • ID == null:字段'ID'null?
  • ID == "null":是字段'ID'的ref是否與新分配的String「null」相同?這通常應該返回錯誤。
  • ID.equals(null):這應該總是返回假 - 從概念上講,這是真的,你應該拋出一個NullPointerException
  • ID.equals("null")String'ID'的值是否與String「null」的值相同?
0

如果該值從Servlet來,然後將容器是空的表單域最有可能轉換爲空字符串。你應該做一個檢查對空和空(」「)。

if (value==null || value.equals("")) 

另外,您可以用String的isEmpty()方法:

if (value==null || value.isEmpty()) 
0

如果你的變量ID的值是字符串「空」,那麼我猜想,有在代碼中較早的一個錯誤,當您使用的getParameter檢索()方法。根據文檔,getParamet如果指定名稱沒有值,則er()方法應該返回null(空引用)。這表明你正在做某個操作,將結果轉換爲字符串文字,或許與空字符串協作(即ID +「」;)

相關問題