簡體   English   中英

toString是否也調用了原始類型?

[英]Is toString called for primitive types also?

我知道每當我們打印一個對象時都會在Java調用toString ,而這默認是在Object類中定義的,它是所有類的超類。

但是,我的老師說當我們打印一些primitive typeint, char等)時也會調用toString

真的嗎 ?

是的,但不是你預期的那種意義。

System.out.println(someInt)

只是一個print包裝,也增加了一條線。

System.out.print(someInt)

電話

String.valueOf(someInt)

反過來打電話

Integer.toString(someInt)

這是Integer類中的靜態方法 ,它返回表示指定整數的String對象 這種方法是一樣的Integer#toString()即其轉換整數對象到表示其int值的字符串的實例方法。

someInt.toString()將無法工作,因為someInt不會擴展Object因為它不是一個對象。

讓我們看看System.out.print(int)是如何工作的。 根據System API System.out是一個PrintStream

public static final PrintStream out

PrintStream src中我們可以看到它如何打印整數:

public void print(int i) {
    write(String.valueOf(i));
}

這是來自String src的String.valueOf(int)

public static String valueOf(int i) {
    return Integer.toString(i);
}

如果您考慮以下代碼

System.out.println(5); 

以下事情將會發生

public void println(int x) {
    synchronized (this) {
        print(x);
        newLine();
    }
}

將調用PrintStream類中的函數,該函數在內部將調用print(x)函數,如下所示 -

public void print(int i) {
    write(String.valueOf(i));
}

現在如果你在String類中看到valueOf()函數

public static String valueOf(int i) {
    return Integer.toString(i);
}

Integer.toString(i)是你的老師通過調用toString()方法的意思。

原語被自動裝箱到它們各自的對象類型。 所以toString()會調用。

暫無
暫無

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

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