用Java打印对象

时间:2012-10-29 18:22:56

标签: java tostring

我运行了以下代码

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

输出 null

起初,我认为会抛出NullPointerException,因为打印对象会隐式调用toString方法。所以,我对输出感到惊讶。

然后我考虑了输出,并认为上面的String语句实际上没有创建任何对象,只创建了不指向任何对象的引用。所以这可能是这种输出的原因。

如果我的理解是正确的,有人可以告诉我。

5 个答案:

答案 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