在Java里面所有的类都有一个共同的父类Object,直接或者间接的继承。那么我们今天要说的toString方法就是存在于Object里面的一个方法,换而言之,所有的类都会具有这个方法。那么这个方法的作用是什么呢?
因为有人问我为什么要重写toString方法,因为每次都是跟着老师快捷键生成,所以根本真的没有理解为什么要重写toString方法,这里详细来说一下。
toString方法
个概念
在Java中,每个类都直接或者间接继承Object类,
toString()方法同样来自object类。
如果我们没有重写toString()方法,每次执行输出语句
的时候,这个方法默认会调用一个继承自Object类型对象
的toString方法,这是基础前提。
意义
重写toString()方法可以这样理解:就是我们对对象在打
印输出的时候的一种格式化,默认toString()的方法只
是把字符串的直接打印,数字要转换成字符再打印,而对
象就是直接打印这个对象的hash码。
如果不理解hash码的去看我在集合源码讲解中的详细的讲解。
举例
- 写个Person类
这是没有重写toString()方法的Person类
public class Person {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Person() {
}
public Person(String name, Integer age) {
this.name = name;
this.age = age;
}
}
- 写个测试类
public static void main(String[] args) {
Person person = new Person();
person.setAge(18);
person.setName("kayleigh");
System.out.println(person);
}
如果我们没有重写toString()方法会这么样?
自己演示
这里我们看出来打印的是一串看不懂的玩意。这里自己 演
示印象会更加深刻。
- 我们加上toString方法
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
就是在Person中加上这段代码,我们会发现输出和没有重写根本就是两码事。
总结
- 如果没有重写,打印的是什么东西呢?
- 重写toString()方法,在执行输出的时候,会自动调用自己写的toString()方法,利用这个规则去打印