Java打印对象的内存地址

来源:互联网 发布:线割编程 编辑:程序博客网 时间:2024/05/22 09:24

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

public class InfiniteRecursion {    public String toString() {        return "InfiniteRecursive address: " + this + "\n";    }    public static void main(String[] args) {        InfiniteRecursion ir = new InfiniteRecursion();        System.out.println(ir);    }}

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

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

1 0
原创粉丝点击