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()。