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

2021-05-19  本文已影响0人  杜艳_66c4

最开始学习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 码了
反之如果重写了,就成了我们能看懂的格式了。
编写实现类的时候还是要重写的

上一篇下一篇

猜你喜欢

热点阅读