这个代码抛出NullPointerException的标准行为是什么?

时间:2010-05-22 11:32:58

标签: java nullpointerexception lejos-nxj

我在某些库代码中遇到了一个大问题,我将其归结为一个语句:

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

好的,代码实际上看起来并不像那样,但它肯定会使用null参数调用println。这样做会导致我的整个应用程序抛出意外的NullPointerException

一般情况下,println是否应该在这种情况下抛出此异常,或者由于out实例执行不当而导致此非标准行为?

5 个答案:

答案 0 :(得分:3)

太阳印刷的JVM只是“空”。当给出null参数时,这是PrintStream.print(String)的指定行为。

答案 1 :(得分: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));
    }
}

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

答案 2 :(得分:1)

上面不应该抛出异常。你确定你没有这样的东西:

System.out.println(a.b);

其中anull

或者,也许您的System.out已设置为空(很少有人意识到您可以设置out / err个流?)

答案 3 :(得分:0)

当我在标准桌面Java(Mac OS X上的Java SE 6更新20)上尝试该行时,它不会抛出NullPointerException,而只是打印null

我认为在这种情况下抛出NullPointerException是一个错误。

答案 4 :(得分:0)

我刚尝试在sun的jdk 6上运行它,它运行得很好。它按预期打印为null。