我在一些库代码中遇到了一个大问题,我将其固定为一个语句:
System.out.println((String) null);
好的,代码实际上并不像那样,但它肯定会println
使用 null 参数调用。这样做会导致我的整个应用程序抛出一个意想不到的NullPointerException
.
一般来说,在这种情况下应该抛出这个异常,还是由于实例println
的实现不佳而导致这种非标准行为?out
我在一些库代码中遇到了一个大问题,我将其固定为一个语句:
System.out.println((String) null);
好的,代码实际上并不像那样,但它肯定会println
使用 null 参数调用。这样做会导致我的整个应用程序抛出一个意想不到的NullPointerException
.
一般来说,在这种情况下应该抛出这个异常,还是由于实例println
的实现不佳而导致这种非标准行为?out
sun 的 JVM 只打印“null”。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);
a
在哪里null
?
或者,也许您System.out
已设置为 null(没有多少人意识到您可以设置out
/err
流)?
NullPointerException
当我在标准桌面 Java(Mac OS X 上的 Java SE 6 更新 20)上尝试该行时,它不会抛出null
.
我认为NullPointerException
在这种情况下抛出 a 是一个错误。
我刚刚尝试在 sun 的 jdk 6 上运行它,它工作得很好。它按预期打印 null 。