2010-05-22 50 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)); 
    } 
} 

感谢您确认这确实是非标准行为。

相关问题