Arrays.toString(students)是怎么调用Student类中重写的toString方法

Arrays.toString(students)是怎么调用Student类中重写的toString方法
public class Student {
    private String name;
    private int age;
    private Double height;

    public Student() {
    }

    public Student(String name, int age, Double height) {
        this.name = name;
        this.age = age;
        this.height = height;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Double getHeight() {
        return height;
    }

    public void setHeight(Double height) {
        this.height = height;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", height=" + height +
                '}';
    }
}
public class ArrayTest4 {
    public static void main(String[] args) {
        Student[] students=new Student[3];
        students[0]=new Student("张三",19,178.0);
        students[1]=new Student("李四",20,180.5);
        students[2]=new Student("王五",17,169.8);
        String student=Arrays.toString(students);
        System.out.println(student);
    }
}
我一直搞不明白Arrays.toString(students)是怎么调用Student类中重写的toString方法,Arrays.toString()不是调用Arrays中的toString吗?

Arrays.toString调用String.valueOf(),String.valueOf()方法又是调用obj.toString(),也就是Student类中的toString()方法

img

img