簡體   English   中英

對象如何隱式調用toString方法?

[英]How an object will call toString method implicitly?

如果我正在打印該類的對象,那么即使我沒有編寫toString()方法,它也在打印toString()方法的實現,那么實現是什么,它如何在內部調用toString()

您沒有顯式調用toString() ,但暗含的是:

看到:

System.out.println(foo); // foo is a non primitive variable

System是一類,具有staticout型的, PrintStream 因此,您正在調用PrintStreamprintln(Object)方法。

它是這樣實現的:

   public void println(Object x) {
       String s = String.valueOf(x);
       synchronized (this) {
           print(s);
           newLine();
       }
   }

如我們所見,它正在調用String.valueOf(Object)方法。
它的實現如下:

   public static String valueOf(Object obj) {
       return (obj == null) ? "null" : obj.toString();
   }

在這里,您可以看到調用了toString()

Java IS-A (n) Object每個對象也是如此。 因此,如果類未提供toString()實現,則會自動調用默認的Object.toString()

Object.toString()默認實現只是打印對象的類名,然后打印對象的哈希碼,這不是很有用。 因此,通常應該重寫toString()以提供對象運行時狀態的更有意義的String表示。

即使我沒有寫toString()方法,所以實現是什么,它如何在內部調用toString()?

toString()是為數不多的某些編程情況(例如僅舉幾個例子) 隱式調用的少數方法(如equals()hashCode()等)之一。

  • 使用println()打印對象
  • 印刷Collection對象toString()被調用上的所有元素)
  • 與字符串連接(例如strObj = "My obj as string is " + myObj;

一切都繼承自Object,因此如果尚未定義,則將調用Object上的toString

toString()方法存在於Object類中,因此,當您將obj放入System.out.println(obj);中時,由於每個用戶創建的類都會隱式繼承Object類,因此它將隱式調用Object類中存在的toString()。新創建的類,這意味着toString()在ur類中可用,因此它將顯示類似以下內容:“ PkgNamePackage.Classname@12cf4”但是,如果u顯式重寫toString方法並提供您自己的實現,則它將字符串寫為你曾經給過Overriden tostring method(); 例如:

public class DogArray {
    @Override
    public String toString() {
        return "Im the newly created Object";
    }

    public static void main(String args[]) {
        DogArray d1 = new DogArray();
        System.out.println(d1);
    }
}

output: Im the newly created Object

在java中,對象類是每個類的超類。每當您將參數傳遞給system.out.println時,內部對象類將轉換為字符串方法。它返回給定的類名@引用值,但根據我們的應用需求對象類到字符串方法將在集合和字符串類中重寫。它返回其內容。

暫無
暫無

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

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