我运行了以下代码
String str = null;
System.out.println(str);
输出 null 。
起初,我认为会抛出NullPointerException
,因为打印对象会隐式调用toString
方法。所以,我对输出感到惊讶。
然后我考虑了输出,并认为上面的String语句实际上没有创建任何对象,只创建了不指向任何对象的引用。所以这可能是这种输出的原因。
如果我的理解是正确的,有人可以告诉我。
答案 0 :(得分:8)
print()
的{{1}}方法explicitly check。
null
答案 1 :(得分:3)
PrintStream.print
检查是null
public void print(String s) {
if (s == null) {
s = "null";
}
write(s);
}
来自Javadoc PrintStream.print
检查它是否为null
:
打印一个字符串。如果参数为null,则打印字符串“null”。否则,字符串的字符将根据平台的默认字符编码转换为字节,并且这些字节的写入方式与write(int)方法完全相同。
答案 2 :(得分:2)
NullPointerException
的引用来调用某个方法或访问某个值时,才会出现 null
。仅仅打印null
值不会导致NullPointerException
。
因此,在下面的代码中,您将获得NPE
: -
String str = null;
System.out.println(str.length());
如果您看到PrintStream#print
方法的源代码,则如下所示: -
public void print(String s) {
if (s == null) {
s = "null";
}
write(s);
}
因此,它会检查null
值并相应地打印"null"
。
答案 3 :(得分:2)
Print()
默认情况下会检查null
,但是当您执行
System.out.print(str.toString());
现在你得到NullPointerException
答案 4 :(得分:1)
使用null
引用打印对象不应该给您带来任何问题。在null
引用(或指针,如果你愿意)上调用一个操作应该给你一个NPE。尝试做一个
System.out.println (str.toString())
这应该给你一个不错的NPE