先看案列
package string;
/**
* @author gwj
*/
public class ToStringTest {
static int i =1;
public static void main(String[] args) {
System.out.println("love "+new ToStringTest());
ToStringTest a = new ToStringTest();
a.i++;
System.out.println("me "+a.i);
}
public String toString(){
System.out.println("I ");
return "java";
}
}
输出结果:
第一次看还是猛一看还是比较蒙的,什么时候调用了toString() 呢? 由于 new ToStringTest() 创建了本类的对象 ,后面又重写了 toString()的方法,由于引用类型会默认调用toString()方法,所以优先执行 System.out.println(“I “); 然后拼接上"love” 如过不重写toString() 方法就会先输出love ,最后返回"java” ;自己debug一下就会很清晰了。
补充:
toString 源码
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}