如果你希望 toString() 方法打印出对象的内存地址,也许你会考虑使用 this 关键字:

public class Test {
	public static void main(String[] args) {
		System.out.println(new Person());
	}
}

class Person {

	@Override
	public String toString() {
		return "address = " + this;
	}
}

这样会产生一个异常:

Exception in thread "main" java.lang.StackOverflowError

当编译器看到一个 String 对象后面跟着“+”,而紧接着的对象不是 String 的类型的,编译器就会试着将该对象转成一个 String。编译器会自动调用 this.toString() 方法,这样就产生了递归。

为了解决这个问题,我们可以将 this 换成 super.toString() 方法。这样就会打印出这样的效果:

com.skillip.test.Person@7852e922

为了只打印出地址值,我们还可以将 this 换成 Integer.toHexString(super.hashCode())。使用 super.hashCode() 是因为很多时候我们还会重写 hashCode() 方法。

最后修改于 2019-03-21 21:09:26
上一篇