1

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

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

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

一般来说,在这种情况下应该抛出这个异常,还是由于实例println的实现不佳而导致这种非标准行为?out

4

5 回答 5

3

sun 的 JVM 只打印“null”。PrintStream.print(String)这是给定null参数时的指定行为。

于 2010-05-22T11:35:03.570 回答
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));
    }
}

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

于 2010-05-22T11:40:38.317 回答
1

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

System.out.println(a.b);

a在哪里null

或者,也许您System.out已设置为 null(没有多少人意识到您可以设置out/err流)?

于 2010-05-22T11:36:28.480 回答
0

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

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

于 2010-05-22T11:36:49.963 回答
0

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

于 2010-05-22T11:36:55.810 回答