小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
前言
每天一小步,成功一大步。大家好,我是程序猿小白 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());
}
}
结果就是得到了一个我们不需要的值。(不听老人言,吃亏在眼前!)
有些年轻人又要不服气了,我就不重写toString方法,照样能得到正确结果,比如:
ArrayList<Integer> list = new ArrayList();
list.add(1);
list.add(2);
System.out.println(list);
是不是有些疑惑了,为什么这里会得到不是上面的结果呢?
因为这里我们使用的时Integer类,而Integer已经重写了toString方法,所以我们可以直接用。
结尾
对于Object类的toString方法返回的是:类名+@+哈希码值,因此我们在使用时都需要根据对应的需求来重写toString方法。快来试一下吧!