[英]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.