toString()方法你会了吗?

221 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

前言

每天一小步,成功一大步。大家好,我是程序猿小白 gw_GW,很高兴能和大家一起学习每天小知识。

以下内容部分来自于网络,如有侵权,请联系我删除,本文仅用于学习交流,不用作任何商业用途。

摘要

本文主要讲解toSting()方法的底层结构和易错事项。

toString()方法

话不多说,先来个源码开开胃。

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

解读一下它的返回值:

    getClass().getName()                  返回类名
+   "@"                                   字符
+   Integer.toHexString(hashCode())       此对象哈希码的无符号十六进制表示

了解了它的底层实现,那我们来看一下"老父亲"Object怎么说的。

他说: 通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂的信息表达式。建议所有子类都重写此方法

年轻人一般都比较叛逆,不听老父亲的话,那我们不重写会得到什么结果呢?

这里我给了一个简单的类,结合例子来看一下。

public class People {
    String name;
    int age;
    public People() {
    }
    public People(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
public class ToStringTest {
    public static void main(String[] args) {
        People xiaoMing = new People("XiaoMing",20);
        System.out.println(xiaoMing.toString());
    }
}

image.png 结果就是得到了一个我们不需要的值。(不听老人言,吃亏在眼前!)

有些年轻人又要不服气了,我就不重写toString方法,照样能得到正确结果,比如:

ArrayList<Integer> list = new ArrayList();
list.add(1);
list.add(2);
System.out.println(list);

image.png 是不是有些疑惑了,为什么这里会得到不是上面的结果呢?

因为这里我们使用的时Integer类,而Integer已经重写了toString方法,所以我们可以直接用。

结尾

对于Object类的toString方法返回的是:类名+@+哈希码值,因此我们在使用时都需要根据对应的需求来重写toString方法。快来试一下吧!