如何打印类的地址

           如何打印类的地址呢?可能会想到this

           上代码

     

class Address{
    String ss;
    Address(String ss){
        this.ss=ss;
    }

    @Override
    public String toString() {
        return  "Address:"+this;
    }
}
public class test {
    public static void main(String args[]){
        Address address=new Address("xixix");
        System.out.println(address);
    }
}

          看上去,代码没有问题,可是运行会报错

  

Exception in thread "main" java.lang.StackOverflowError
	at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:449)
	at java.lang.StringBuilder.append(StringBuilder.java:136)
	at com.example.eurekaclient.Address.toString(test.java:18)
	at java.lang.String.valueOf(String.java:2994)
	at java.lang.StringBuilder.append(StringBuilder.java:131)
	at com.example.eurekaclient.Address.toString(test.java:18)
	at java.lang.String.valueOf(String.java:2994)
    。。。。。。。。。。。。。。省略

      堆栈溢出,感觉很奇怪,但是仔细看一下代码的话,会发现,其实我们无意识的进行了递归,所以才造成了堆栈溢出

原因在于,我们打印this,其实就是调用this.toString() 然而我们打印this的语句本身就在this.toString()中,所以无限循化,

那么该怎么办呢

class Address{
    String ss;
    Address(String ss){
        this.ss=ss;
    }

    @Override
    public String toString() {
        return  "Address:"+super.toString();
    }
}
public class test {
    public static void main(String args[]){
        Address address=new Address("xixix");
        System.out.println(address);
    }
}

 把this改成super.toString()问题就解决了,因为父类也有toString方法,这样即可以得到我们想要的结果,又不会造成递归。

 结果

Address:com.example.eurekaclient.Address@4b85612c

Process finished with exit code 0

参考资料:《java编程思想》

猜你喜欢

转载自blog.csdn.net/qq_33543634/article/details/82348046