Java之关于toString的小结

之前学习编程的时候,我是不注重看书的,可能和本身心态有些浮躁有关,我更倾向于视频教程,最近和一个大佬聊了聊,才渐渐觉得是时候该看一些编程的书籍了,而不是学习全靠视频和网上零散的文章。最近正在温习java的基础部分,恰好看到了toString的部分,觉得有点意思,遂记录之...

首先,是祖先类Object中定义的toString方法:

public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }

由全限定类名+@+16进制的hash值组成,可能有的时候,这个方法并不能提供给我们需要的信息,于是,我们需要重写一下toString方法,有一种简单的方式是使用编译器生成,比如它会长这样:

public class Top {

    private Integer id;
    private String code;


    @Override
    public String toString() {
        return "Top{" +
                "id=" + id +
                ", code='" + code + '\'' +
                '}';
    }
}

可见,方法的返回值由类名和成员变量组成,但是,有一个问题就是,如果这个类存在子类,而子类想打印出父类和自己所有的成员变量时,就不是很友好了,因为返回值中类名的部分依然是父类的类名。

所以,可以做出如下更改:

public class Top {

    private Integer id;
    private String code;

    @Override
    public String toString() {
        return this.getClass().getName() + "{" +
                "id=" + id +
                ", code='" + code + '\'' +
                '}';
    }
    
}

子类中可以这样写:

public class Middle extends Top {

    private Double salary;

    @Override
    public String toString() {
        return super.toString() +
                "{salary=" + salary +
                '}';
    }
}

这样打印出的信息会更加友好。

不过,在java中数组的toString依旧不是很友好,如果想打印出一维数组的字符串形式可以使用Arrays.toString(),如果是多维数组可以使用Arrays.deepToString()。

posted @ 2020-10-22 10:51  无心大魔王  阅读(260)  评论(0编辑  收藏  举报