Java中的打印对象

Java中的打印对象,java,tostring,Java,Tostring,我运行了以下代码 String str = null; System.out.println(str); 输出为空 起初,我认为当打印对象隐式调用toString方法时,会抛出NullPointerException。所以,我对结果感到惊讶 然后我考虑了一下输出,认为上面的String语句实际上没有创建任何对象,只创建了不指向任何对象的引用。因此,这可能是这种输出的原因 谁能告诉我我的理解是否正确。用于null的print()方法 public void print(String s) {

我运行了以下代码

String str = null;
System.out.println(str);
输出为空

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

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

谁能告诉我我的理解是否正确。

用于
null
print()
方法

public void print(String s) {
    if (s == null) {
        s = "null";
    }
    write(s);
}
检查它是否为
null

 public void print(String s) {
   if (s == null) {
    s = "null";
   }
   write(s);
 }
从Javadoc检查它是否为
null

打印字符串。如果参数为null,则打印字符串“null”。否则,字符串的字符将根据平台的默认字符编码转换为字节,并且这些字节完全按照write(int)方法的方式写入


NullPointerException
仅当您使用指向
null
的引用来调用某个方法或访问某个值时才会发生。仅打印
null
值不会导致
NullPointerException

因此,在下面的代码中,您将获得
NPE
:-

String str = null;
System.out.println(str.length());
如果您看到方法的源代码,如下所示:-

public void print(String s) {
    if (s == null) {
        s = "null";
    }
    write(s);
}

因此,它会检查
null
值,并相应地打印
“null”

使用
null
引用打印对象应该不会给您带来问题。调用
null
引用(或指针,如果愿意)上的操作应该会得到NPE。试着做一个测试

System.out.println(str.toString())

这会给你一个不错的NPE,默认情况下检查
null

System.out.print(str.toString());
现在您将获得
NullPointerException

+1。看见