2014-11-22 74 views
1

有時會發生,我已經寫了代碼來檢查的NullPointerException像下面,空檢查引發NullPointerException異常

if(str!=null) 
{ 
    doSomething(); 
} 

和空檢查本身將引發NullPointerException異常。

如何解決它。

編輯: 其實這個代碼是越來越空指針,

Map params = new HashMap(); 
if(params != null && params.get("requestType")) 
{ 
    //some null safe code goes here 
} 

我明白晚些時候params.get()被扔空指針異常。

+0

你能發佈你的完整代碼嗎? – 2014-11-22 05:34:33

+1

就像你說的那樣,你沒有代碼來「檢查NullPointerException」,但是你有檢查'null'的代碼。這段代碼本身不可能拋出一個NullPointerException,所以這個問題必須在你的代碼中的其他地方,在你還沒有發佈到SO的地方。 – 2014-11-22 05:38:14

+1

檢查沒有拋出異常。也許你做了(str!= null); {}或if(str.foobar()!= null){} – MeBigFatGuy 2014-11-22 05:48:05

回答

7

你似乎在說:

if (str != null) { 
    doSomething(); 
} 

在比較扔NullPointerException

也就是說不可能。因此,我希望什麼是真正發生的事情是下列之一:

  • 你誤解堆棧跟蹤和NPE是不是被扔在那裏。

  • 實際的代碼與說明性的例子有很大的不同。

  • 你不執行,你認爲你正在執行的代碼。例如,您可能沒有重新編譯它,或者您可能正在執行.class.jar文件的陳舊副本。

  • 您設法嚴重混淆了您的IDE。 (有時你可以從迷茫IDE得到非常奇怪的行爲...)


這樣代碼可能給一個NPE,是不是另一個事物的假象,你做錯了唯一的情況是如果Java(或IDE)安裝受損,或者硬件出現故障。我傾向於打折這些解釋。


更新

現在你說:

Map params = new HashMap(); 
if(params != null && params.get("requestType")) 
{ 
    //some null safe code goes here 
} 

拋出params.get的NPE。我不得不說這是無稽之談。

  1. 該代碼不會編譯。 params.get呼叫不會返回boolean或可以自動轉換爲boolean的內容。

  2. 如果我們忽略這一點,那麼params.get在線程限制的地圖上只能拋出一個NPE,如果paramsnull。這張地圖線程限制,和以前的檢查是爲了確保paramsnull

我以前的結論就是這樣。

提示:本可能是一個線程的問題。如果您使用一個線程更新HashMap並使用另一個線程讀取它,並且您沒有正確同步,可能會得到間歇性NPE。

+0

日Thnx @StephenÇ – prsutar 2014-11-24 09:00:01

+0

最近我一直在努力支持項目,該文件是JSP文件,並寫在小腳本在像上面的條件是給NPE的代碼,所以問的問題,日Thnx答覆。 – prsutar 2014-11-24 09:14:13

1

你有沒有檢查過它可以解釋我的情況。這是在Java中。 如果它是在Java中,那麼這裏是一個示例代碼,它可以很好地進行交叉檢查。 如果它是一個局部變量,它也可以正常工作。

class string 
{ 
static String str; 
public static void main(String[] args) 
{ 
if(str!=null) 
{ 
System.out.println("hi"); 
} 
else 
{ 
System.out.println("bye"); 
} 
} 
} 
-4

這裏你已經描述過在你的程序中發生了一個空指針異常。空檢查給出空指針異常

if(str!=null) 
    { 
     doSomething(); 
    } 

這裏如果你檢查你的完整程序。在這裏只有一件事情是錯的,那就是str在這裏是空的,所以它給了你一個空指針異常。 PLZ檢查烏爾計劃更多的時間......

+2

使用'!='運算符**的空檢查不能**拋出NullPointerException。請刪除您的不正確和令人困惑的答案。 – 2014-11-23 14:19:04