簡體   English   中英

tostring()被隱式調用……如何?

[英]tostring() is implicitly called… how?

在以下代碼中,如何隱式調用toString()

class Payload {
    private int weight;
    public Payload (int w) {
        weight = w; 
    }
    public void setWeight(int w) {
        weight = w; 
    }
    public String toString() {
        return Integer.toString(weight); 
    }
}

public class testpayload {
    static void changePayload(Payload p) {
        p.setWeight(420);
    } 
    public static void main(String[] args) {
        Payload p = new Payload(200);
        p.setWeight(1024);
        changePayload(p);
        System.out.println("p is " + p);
    }
}

這行:

System.out.println("p is " + p);

使用在JLS的15.18.1節中指定的字符串連接,從以下開始:

如果只有一個操作數表達式的類型為String,則對另一操作數執行字符串轉換(第5.1.11節),以在運行時生成字符串。

5.1.11節具有:

可以通過字符串轉換將任何類型轉換為String類型。

...

現在只需要考慮參考值:

  • 如果引用為null ,則將其轉換為字符串"null" (四個ASCII字符n,u,l,l)。

  • 否則,將執行轉換,就好像調用了不帶參數的引用對象的toString方法一樣; 但是,如果調用toString方法的結果為null ,則使用字符串"null"代替。

您正在調用"p is " + p ,它實際上被編譯為

new StringBuffer("p is").append(p)

此代碼在.append()調用p.toString() ,因為pObject

指定者:
http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html#append(java.lang.Object)

這只是一項免費的語言功能。 請參閱連接字符串部分:

這樣的串聯可以是任何對象的混合。 對於不是String的每個對象,將調用其toString()方法將其轉換為String。

暫無
暫無

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

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