在以下代码中,如何隐式调用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);
}
}
答案 0 :(得分:9)
这一行:
System.out.println("p is " + p);
使用字符串连接,它在JLS的section 15.18.1中指定,从以下开始:
如果只有一个操作数表达式是String类型,则在另一个操作数上执行字符串转换(第5.1.11节)以在运行时生成字符串。
任何类型都可以通过字符串转换转换为
String
类型。...
现在只需要考虑参考值:
如果引用为
null
,则将其转换为字符串"null"
(四个ASCII字符n,u,l,l)。否则,转换的执行就好像通过调用引用对象的
toString
方法而没有参数一样;但如果调用toString
方法的结果为null
,则会改为使用字符串"null"
。
答案 1 :(得分:2)
你正在调用"p is " + p
,它被有效地编译为
new StringBuffer("p is").append(p)
此代码在p.toString()
内调用.append()
p
为Object
。
指定人:
http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html#append(java.lang.Object)
答案 2 :(得分:0)
这只是一种免费提供的语言功能。请参阅Concatenating strings部分:
这种连接可以是任何对象的混合。对于不是String的每个对象,调用其toString()方法将其转换为String。