Java 重写equals方法

对象的contains方法实际上也是调用的equals方法来进行逐条对比的。

示例代码:

package com.imooc.collection;

/**
 * 课程类
 */

public class Course {
    private String id;
    private String name;

    public Course(){

    }

    public Course(String id, String name) {
        this.id = id;
        this.name = name;
    }

    public void setId(String id){
        this.id = id;
    }

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

    public String getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    /**
     * 重写 Course类的 Equals方法
     * @param obj
     * @return
     */
    @Override
    public boolean equals(Object obj){
        if(this == obj) {
            return true;
        }

        if(obj == null) {
            return false;
        }

        if(!(obj instanceof Course)){
            return false;
        }

        Course course = (Course) obj;
        if(this.name.equals(course.name) && this.id.equals(course.id)) {
            return true;
        }
        return false;
    }

}

原文地址:https://www.cnblogs.com/vincenshen/p/10159264.html

时间: 2024-10-07 00:14:44

Java 重写equals方法的相关文章

java重写equals方法(重点讲解)

为什么equals()方法要重写? 判断两个对象在逻辑上是否相等,如根据类的成员变量来判断两个类的实例是否相等,而继承Object中的equals方法只能判断两个引用变量是否是同一个对象.这样我们往往需要重写equals()方法. 我们向一个没有重复对象的集合中添加元素时,集合中存放的往往是对象,我们需要先判断集合中是否存在已知对象,这样就必须重写equals方法. 怎样重写equals()方法? 重写equals方法的要求: 1.自反性:对于任何非空引用x,x.equals(x)应该返回tru

关于java重写equals方法

首先为什么要重写equals方法呢? 这可能是我们比较关心的一个问题. 我个人的理解是,因为java Object类中自带的equals方法可能往往功能不够用. 所以我们需要重写他,给他自定义一些功能或者说是拿去特定的地方去用. 比如说我们要比较两个对象中的是否相同.我们就要拿这2个对象中的属性是否相同. 但是Object类中提供的方法没有提供这样的功能,所以我们这个时候就需要重写. 我们来看下例子(附带一些本人的理解,只做参考,欢迎批评指正.) 1 public class EqualsOve

java重写equals方法需要注意的几点

为什么equals()方法要重写? 判断两个对象在逻辑上是否相等,如根据类的成员变量来判断两个类的实例是否相等,而继承Object中的equals方法只能判断两个引用变量是否是同一个对象.这样我们往往需要重写equals()方法. 我们向一个没有重复对象的集合中添加元素时,集合中存放的往往是对象,我们需要先判断集合中是否存在已知对象,这样就必须重写equals方法. 怎样重写equals()方法? 重写equals方法的要求:1.自反性:对于任何非空引用x,x.equals(x)应该返回true

java重写equals方法

重写equals: 比较内容. hashCode: 内容的hashCode(). /* * 重写equals必须注意: * 1 自反性:对于任意的引用值x,x.equals(x)一定为true * 2 对称性:对于任意的引用值x 和 y,当x.equals(y)返回true,y.equals(x)也一定返回true * 3 传递性:对于任意的引用值x.y和z,如果x.equals(y)返回true,并且y.equals(z)也返回true,那么x.equals(z)也一定返 回 true * 4

JAVA中重写equals()方法的同时要重写hashcode()方法

object对象中的 public boolean equals(Object obj),对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true:注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码.如下:(1)当obj1.equals(obj2)为true时,obj1.hashCode() == obj2.hashCode()必须为true (2)当obj1.ha

JAVA中重写equals()方法为什么要重写hashcode()方法?

object对象中的 public boolean equals(Object obj),对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true:注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码.如下:(1)当obj1.equals(obj2)为true时,obj1.hashCode() == obj2.hashCode()必须为true (2)当obj1.ha

JAVA中重写equals()方法为什么要重写hashcode()方法说明

重写hashCode()时最重要的原因就是:无论何时,对同一个对象调用hashCode()都应该生成同样的值.如果在将一个对象用put()方法添 加进HashMap时产生一个hashCode()值,而用get()取出时却产生了另外一个 hashCode()值,那么就无法重新取得该对象了.所以,如果你的hashCode()方法依赖于对象中易变的数据,那用户就要小心了,因为此数据发 生变化时,hashCode()就会产生一个不同的hash码,相当于产生了一个不同的"键". Object的h

Effective Java 第三版——10. 重写equals方法时遵守通用约定

Tips <Effective Java, Third Edition>一书英文版已经出版,这本书的第二版想必很多人都读过,号称Java四大名著之一,不过第二版2009年出版,到现在已经将近8年的时间,但随着Java 6,7,8,甚至9的发布,Java语言发生了深刻的变化. 在这里第一时间翻译成中文版.供大家学习分享之用. 10. 重写equals方法时遵守通用约定 虽然Object是一个具体的类,但它主要是为继承而设计的.它的所有非 final方法(equals.hashCode.toStr

java开发----自定义对象,重写equals方法

javaweb开发中,用到了好多自定义对象,这时候如果不重写equals方法,很多时候都会返回false, 因此我们必须习惯重写这个方法. 重点: 1.equals比较俩对象时比较的是对象引用是否指向同一地址 2.重写后比较的是俩者value是否相等 3.在重写的同时也要将hashcode方法重写--------至于为什么,在某个地方看到有人将此比作名字和身份证,感觉很恰当.(点击查看原因) 扩展: equals比较八大包装对象 (如Float,Double,Integer,Date,Point