Java的toString()重写问题

问题遇到的现象和发生背景

今天做练习引用类型数组,发现一个有意思的事儿,我想不明白,前来求解,为什么主函数没调用toString(),输出结果却是toString()形式

问题相关代码,请勿粘贴截图
public class Test {
    public static void main(String[] args) {
        Person[] people = new Person[3];
        String[] names = {"徐凤年", "李淳罡", "王仙芝"};
        int[] ages = {25, 35, 55};
        int[] height = {180, 188, 175};
        for (int i = 0; i < people.length; i++) {
            people[i] = new Person();
            people[i].name = names[i];
            people[i].age = ages[i];
            people[i].height = height[i];
        }

        for (Person p : people) {
            System.out.println(p);
        }
    }
}
class Person {
    public String name;
    public int age;
    public int height;
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", height=" + height +
                '}';
    }

}

运行结果及报错内容

img

我的解答思路和尝试过的方法
我想要达到的结果

System.out.println方法传入的如果是非String对象,那么就会自动调用对象的toString方法。

println如果是对象类型会调用toString

如果你没有重新tostring方法,那么他会调用默认自带的tostring,你重写了就会调用你重写了的