入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

Java打印对象的内存地址

创建时间:2016-04-24 投稿人: 浏览次数:11455

如果需要toString()方法打印出对象的内存地址,也许会这么写:

public class InfiniteRecursion {
    public String toString() {
        return "InfiniteRecursive address: " + this + "
";
    }

    public static void main(String[] args) {
        InfiniteRecursion ir = new InfiniteRecursion();
        System.out.println(ir);
    }
}

这样写代码运行时会出现异常。原因在于,在"InfiniteRecursive address: " + this + " ";这里发生了自动类型转换,由this的InfiniteRecursion类型转换成String类型。编译器看到一个String类型的变量后面跟着一个“+”,而再后面的对象不是String类型,所以编译器会尝试着将this转换成一个String对象。问题来了,编译器要怎么转换呢?就是使用this的toString()方法,这样就会发生递归调用,产生了异常。

如果想要正确地打印出内存地址,应该调用Object.toString()方法,所以应该把toString()方法中的this改成super.toString()就没问题了。

声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。