我已經在一些庫代碼的一個大問題,我已經固定到一個單一的語句:這段代碼是拋出NullPointerException的標準行爲嗎?
System.out.println((String) null);
好,代碼實際上並不像她那樣,但它肯定要求println
與一個空參數。這樣做會導致我的整個應用程序拋出意想不到的NullPointerException
。
一般情況下,println
應該在這種情況下拋出這個異常,還是由於out
實例執行不當導致的這種非標準行爲?
我已經在一些庫代碼的一個大問題,我已經固定到一個單一的語句:這段代碼是拋出NullPointerException的標準行爲嗎?
System.out.println((String) null);
好,代碼實際上並不像她那樣,但它肯定要求println
與一個空參數。這樣做會導致我的整個應用程序拋出意想不到的NullPointerException
。
一般情況下,println
應該在這種情況下拋出這個異常,還是由於out
實例執行不當導致的這種非標準行爲?
Sun的JVM僅打印出「null」。當給定null
參數時,這是PrintStream.print(String)
的指定行爲。
上面不應該拋出異常。你確定你沒有這樣的:
System.out.println(a.b);
其中a
是null
?
或者,也許您的System.out
已設置爲空(沒有多少人意識到您可以設置流out
/err
流)?
不,我在自己的平臺上運行該代碼,並拋出了'NullPointerException'。 – Eric 2010-05-22 11:38:13
當我在標準桌面Java(Mac OS X上的Java SE 6 update 20)上嘗試該行時,它不會拋出NullPointerException
,它只會打印null
。
我認爲拋出NullPointerException
是這種情況下的一個錯誤。
我只是試着在sun的jdk 6上運行它,它工作得很好。它按預期打印出null。
好的,發現錯誤,在我的平臺的實現PrintStream.print
。我想我會跟着開發者跟進。
public void print(String s) {
// WHERE IS THE NULL CHECK??!
for(int i=0;i<s.length();i++) {
write(s.charAt(i));
}
}
感謝您確認這確實是非標準行爲。
您使用的是什麼jvm? – whiskeysierra 2010-05-22 22:15:48