Java打印对象的内存地址
如果需要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。
- 上一篇: Java调用Python脚本并获取返回值
- 下一篇:没有了