打印内存地址(无意识的递归)
如果你希望 toString 方法打印出对象的内存地址,也许你会考虑使用 this 关键字
public class Test6 { @Override public String toString() { return "内存地址为"+this; } public static void main(String[] args) { Test6 t = new Test6(); System.out.println(t); } }
当你像删上面这样做的时候,会得到一个非常长的异常。其实当代码运行到
return "内存地址为"+this;
这里发生了自动的类型转换。编译器看到一个 String 后面跟着 ‘+’ ,而再后面的对象不是 String ,于是编译器试图将 this 转为 String 。他是怎么转换的呢,正式通过 this 上的 toString方法,于是就发生了递归调用。如果你想打印出内存地址,应该调用 Object 的 toString 方法,而不是 this。
return "内存地址为"+super.toString();