簡體   English   中英

用Java打印對象

[英]Printing object in Java

我運行了以下代碼

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

輸出為

起初,我認為將拋出NullPointerException因為打印對象隱式調用toString方法。 所以,我對輸出感到驚訝。

然后我考慮了輸出,並認為上面的String語句實際上沒有創建任何對象,只創建了不指向任何對象的引用。 這可能是這種輸出的原因。

如果我的理解是正確的,有人可以告訴我。

print()方法顯式檢查 null

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

PrintStream.print檢查它是否為null

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

從Javadoc PrintStream.print檢查它是否為null

打印一個字符串。 如果參數為null,則打印字符串“null”。 否則,根據平台的默認字符編碼將字符串的字符轉換為字節,並且這些字節的寫入方式與write(int)方法完全相同。

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"

Print()默認情況下檢查null ,但是當你這樣做時

System.out.print(str.toString());

現在你得到NullPointerException

使用null引用打印對象不應該給您帶來問題。 null引用(或指針,如果你願意)上調用一個操作應該給你一個NPE。 嘗試做一個

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

這應該給你一個不錯的NPE

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM