美文网首页
为什么println(对象)的时候是调用对象toString方法

为什么println(对象)的时候是调用对象toString方法

作者: ChenMurphy | 来源:发表于2021-07-20 14:37 被阅读0次

    student的类重写toString方法的时候:

    public class Student {
        private String name;
        private int age;
        @Override
        public String toString(){
            return "名字:" + name + "," + "年龄:" + age;
        }
    }
    class A {
        public static void main(String[] args){
            Student student = new Student("那鲁多",16);
            System.out.println(student);
        }
    }
    

    println输出就是调用了student的toString


    student的类没有重写toString方法的时候

    public class Student {
        private String name;
        private int age;
    //    @Override
    //    public String toString(){
    //        return "名字:" + name + "," + "年龄:" + age;
    //    }
    }
    class A {
        public static void main(String[] args){
            Student student = new Student("那鲁多",16);
            System.out.println(student);
        }
    }
    

    Object 的toString

        public String toString() {
            return getClass().getName() + "@" + Integer.toHexString(hashCode());
        }
    

    pirntln输出的就是调用Object的toString
    return getClass().getName()就是类名。类名=包+类名。
    Integer.toHexString(hashCode())就是地址


    那么为什么会println会调用toString呢?

    看一下println的参数:



    看一下参数是对象时候的println的源码

        public void println(Object x) {
            String s = String.valueOf(x);
            synchronized (this) {
                print(s);
                newLine();
            }
        }
    

    再看一下String.valueOf(x)的源码

        public static String valueOf(Object obj) {
            return (obj == null) ? "null" : obj.toString();
        }
    

    可以发现是确实println参数是对象的时候是调用了对象的toString方法。

    相关文章

      网友评论

          本文标题:为什么println(对象)的时候是调用对象toString方法

          本文链接:https://www.haomeiwen.com/subject/xfzlmltx.html