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

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

好的,代码实际上并不是那样的,但肯定会调用 println 以无效的论点。这样做会导致我的整个应用程序抛出意想不到的 NullPointerException.

通常,应该 println 在这种情况下抛出此例外,或者由于不良的实施而导致这种非标准行为 out 实例?

有帮助吗?

解决方案

太阳的JVM简单地“空”。这是指的指定行为 PrintStream.print(String) 给予 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));
    }
}

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

上面的不应该引发例外。您确定没有类似的东西:

System.out.println(a.b);

在哪里 anull ?

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

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

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

我只是尝试在Sun的JDK 6上运行此操作,而且效果很好。它按预期打印为空。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top