2010-05-22 52 views
1

我已經在一些庫代碼的一個大問題,我已經固定到一個單一的語句:這段代碼是拋出NullPointerException的標準行爲嗎?

System.out.println((String) null); 

好,代碼實際上並不像她那樣,但它肯定要求println與一個空參數。這樣做會導致我的整個應用程序拋出意想不到的NullPointerException

一般情況下,println應該在這種情況下拋出這個異常,還是由於out實例執行不當導致的這種非標準行爲?

+0

您使用的是什麼jvm? – whiskeysierra 2010-05-22 22:15:48

回答

1

上面不應該拋出異常。你確定你沒有這樣的:

System.out.println(a.b); 

其中anull

或者,也許您的System.out已設置爲空(沒有多少人意識到您可以設置流out/err流)?

+0

不,我在自己的平臺上運行該代碼,並拋出了'NullPointerException'。 – Eric 2010-05-22 11:38:13

0

當我在標準桌面Java(Mac OS X上的Java SE 6 update 20)上嘗試該行時,它不會拋出NullPointerException,它只會打印null

我認爲拋出NullPointerException是這種情況下的一個錯誤。

0

我只是試着在sun的jdk 6上運行它,它工作得很好。它按預期打印出null。

2

好的,發現錯誤,在我的平臺的實現PrintStream.print。我想我會跟着開發者跟進。

public void print(String s) { 
    // WHERE IS THE NULL CHECK??! 
    for(int i=0;i<s.length();i++) { 
     write(s.charAt(i)); 
    } 
} 

感謝您確認這確實是非標準行爲。

相關問題