打印内存地址(无意识的递归)

如果你希望 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();

 

posted @ 2018-07-13 14:37  方方方方方方  阅读(159)  评论(0编辑  收藏  举报