云计算百科
云计算领域专业知识百科平台

IDEA编写Java面向对象:重写toString()与equals(),别再用==比较对象!

最近做Java实验,写Student、Goods实体类的时候,踩了equals和==的大坑。很多新手分不清什么时候用==,什么时候重写equals,今天结合实验代码一次性讲清楚。

Object是Java中所有类的父类,我们写的任何自定义类,默认继承Object。Object自带两个非常重要的方法:toString()、equals(),也是期末考试、实验作业高频考点。

一、toString()方法

默认Object的toString打印的是对象地址,没什么意义。重写toString(),可以自定义打印对象的信息,直接System.out.println(对象)就会自动调用。

实验需求:Student类,输出格式:id: xxx, name: xxx, age: xxx

public class Student {
    // 封装:私有属性
    private String id;
    private String name;
    private int age;

    // 构造方法
    public Student(String id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    // get set
    public String getId() { return id; }
    public void setId(String id) { this.id = id; }
    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; }

    // 重写toString
    @Override
    public String toString() {
        return "id: " + id + ", name: " + name + ", age: " + age;
    }
}

二、equals()重写(重点!)

==:引用类型比较内存地址,只有两个是同一个对象才返回true。
默认Object的equals底层就是==。
业务需求:学号相同,就认为是同一个学生,和内存地址无关,这时候必须重写equals。

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Student student = (Student) o;
    // 判断学号相等即相同对象
    return id.equals(student.id);
}

三、测试类

public class TestStudent {
    public static void main(String[] args) {
        Student s1 = new Student("1111111111","xxx",19);
        Student s2 = new Student("1111111111","张三",20);
        System.out.println(s1);
        System.out.println("s1和s2是否是同一个学生:" + s1.equals(s2));
    }
}

运行结果:id: 1111111111, name: xxx, age: 191
s1和s2是否是同一个学生:true

四、实验易错总结

1. 封装:成员变量用private,外部不能直接访问,必须get/set。

2. equals重写一定要做类型判断,防止类型转换异常。

3. 区分:==比较地址;重写后的equals比较对象内容。

结尾

本次实验的Goods商品类思路完全一样,根据商品编号重写equals。

 

 

赞(0)
未经允许不得转载:网硕互联帮助中心 » IDEA编写Java面向对象:重写toString()与equals(),别再用==比较对象!
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!