Java 深究字符串String类(2)之重写toString()方法无意识递归

来源:互联网 发布:网络歌曲 缘分五月 编辑:程序博客网 时间:2024/04/29 23:08

Java中每个类都是Object的子类,Object 有toString方法,所以标准容器自然都有
如果希望toString方法以打印对象内存地址,可以直接打印

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

输出:
Two@610455d6
好着呢,,但如果,想在那一串之前打印点什么.
可以重写toString方法

@Overridepublic String toString() {    return String.format("adress : %s", this);    }public static void main(String[] args) {    Two t = new Two();    System.out.println(t);}

这样写好像对着呢
预计输出为:
adress : Two@610455d6

但运行时发现,抛了很多很多异常
原因如下:

return String.format("adress : %s", this);                                    //相当于↓return String.format("adress : %s", this.toString);    

然后调用的toString是重载过的,即自身,而至于无限递归.

如果实在想在这打印地址,正确方法如下:

public static void main(String[] args) {    Two t = new Two();    System.out.println(t);}@Overridepublic String toString() {    return String.format("adress : %s", super.toString());}

去调用父类的toString~

输出:
adress : Two@610455d6

0 0