[英]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.