该代码投掷NullPoInterException是标准行为吗?
-
04-10-2019 - |
题
我在某些库代码中遇到了一个大问题,我将其固定在一个语句中:
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);
在哪里 a
是 null
?
或者,也许你 System.out
已设置为无效(没有多少人意识到您可以设置 out
/err
流)?
当我在标准桌面Java上尝试该行(Java SE 6 Update 20在Mac OS X上)时,它不会抛出 NullPointerException
, ,它只是打印 null
.
我认为投掷 NullPointerException
在这种情况下是一个错误。
我只是尝试在Sun的JDK 6上运行此操作,而且效果很好。它按预期打印为空。
不隶属于 StackOverflow