美文网首页
为什么要重写toString()方法呢?

为什么要重写toString()方法呢?

作者: 杜艳_66c4 | 来源:发表于2021-05-19 16:21 被阅读0次

    最开始学习java基础,只是觉得教程说需要重写就重写,而没去关心为啥这样子,这篇文章就是帮助初学者正确解读实体类重写toString() 方法。

    一、java默认的toString方法来自Object 类

    在Java中每个类都直接或者间接继承Object 类,toString() 方法也是来自Object 类滴, 所以若不重写tostring,每次执行System.out.println() 这个方法默认就会调用一个继承自Object 类型对象的toString 方法

    二、为啥重写呢

    请直接看看例子
    student类,

    未重写toString 方法

    package base.Studentpa;
    
    /**
     * @author duyanyan
     * @date 2021/4/30 14:28
     */
    public class Student implements Comparable<Student>{
        private String name;
        private int age;
    
    
    
        public Student(){
    
        }
    
        public Student(String name, int age) {
            this.name = name;
            this.age = age;
        }
    
        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;
        }
    
    /*    @Override
        public String toString() {
            return "Student{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }*/
        @Override
        public int compareTo(Student o){
            return this.age - o.age ;
        }
    }
    
    

    实例类

    package base.Studentpa;
    
    import java.util.ArrayList;
    import java.util.Collections;
    
    /**
     * @author duyanyan
     * @date 2021/4/30 14:31
     */
    public class StudentDemo {
        public static void main(String[] args) {
            //创建学生对象存储到集合中
            ArrayList<Student> list = new ArrayList<>();
    
            list.add(new Student("玛尼玛尼哄",18));
            list.add(new Student("欧若拉",16));
            list.add(new Student("妲己",16));
            list.add(new Student("甄姬弹水晶",17));
            list.add(new Student("安其拉大尾巴",16));
    
            /* 让学生 按照年龄排序 升序*/
            Collections.sort(list);//要求 该list中元素类型  必须实现比较器Comparable接口
    
            for (Student student : list) {
                System.out.println(student);
            }
            System.out.println("abd");
            System.out.println(2);
        }
    }
    

    测试结果:

    base.Studentpa.Student@677327b6
    base.Studentpa.Student@14ae5a5
    base.Studentpa.Student@7f31245a
    base.Studentpa.Student@6d6f6e28
    base.Studentpa.Student@135fbaa4
    abd
    2
    

    重写toString()方法

    测试结果

    Student{name='欧若拉', age=16}
    Student{name='妲己', age=16}
    Student{name='安其拉大尾巴', age=16}
    Student{name='甄姬弹水晶', age=17}
    Student{name='玛尼玛尼哄', age=18}
    abd
    2
    

    总结下哈:
    若不重写toString()方法,调用了Object 的toString(),则结果如下:
    1、是字符串, 如例子中"abc", 直接输出字符串
    2、是数字,也就是数字
    3、数对象,就是我们看不懂的hash 码了
    反之如果重写了,就成了我们能看懂的格式了。
    编写实现类的时候还是要重写的

    相关文章

      网友评论

          本文标题:为什么要重写toString()方法呢?

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