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