我已经在一些库代码的一个大问题,我已经固定到一个单一的语句:这段代码是抛出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