[英]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()
,因為p
是Object
。
指定者:
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.