在java学习中,看到这样的代码
public class Animal {
public String name;
public int age;
public Animal() {
}
public Animal(String name) {
this.name = name;
}
public String f1(){
return "kk";
}
}
public class Main {
public static void main(String[] args) {
Animal cat=new Animal("hh");
System.out.println(cat);
}
}
我们都知道运行结果会打印出cat的地址
Animal@3b07d329
但在今天的学习中,我发现如果在Animal类中,加上这样一行代码
public String toString(){
return name;
}
再看打印结果
hh
似乎这里自动就执行了
我们再贴加一点东西
public String toString(){
this.age=20;
return name;
}
将main里面改成
public class Main {
public static void main(String[] args) {
Animal cat=new Animal("hh");
}
}
就只创建对象,不做其他的。
进行调试,发现哪怕main里没调用toString,没写其他的,toString似乎也被执行了,将age改成了20!
所以
toString是个什么方法,为什么写出来,打印结果不再是地址?
经查询源码可知 是println里会调用 类的toString 方法,类的toString方法一般都是默认的返回地址值,而我们是相当于重写了一下toString方法,使他返回 name。