`
free9277
  • 浏览: 107268 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

重写Object中的equals方法

阅读更多

         在比较两个对象时可以使用==和equals()。==用于比较两个对象的引用地址是否相等,而equals()方法主要用于比较两个对象的内容是否相等。

    在Object中已定义了equals()方法,但是该方法直接采用==操作符实现,因此子类不重写该方法,那么子类对象在比较时将使用Object中定义的equals(),其结果与==操作符的比较结果是一样的。代码如下所示:

public class User {
    //用户名称
    private String userName;
    //用户密码
    private String password;
    
    public User(String userName, String password){
        this.userName = userName;
        this.password = password;
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        User user = new User("xiaoming", "123");
        User user01 = new User("xiaoming", "123");
        System.out.println(user.equals(user01));
    }
}

        代码执行结果:false。

    可是我们使用equals()目的在于,比较类对象中的内容是否相等。这执行结果显然不是我们要的结果。因此为了方便比较类对象的内容是否相等,在定义类时一般都建议重写equals()方法。代码如下:

public class User {
    //用户名称
    private String userName;
    //用户密码
    private String password;
    
    public User(String userName, String password){
        this.userName = userName;
        this.password = password;
    }
    
    /**
     * 覆盖equals方法
     */
    public boolean equals(Object obj){
        if(obj == null){
            return false;
        }
        
        //如果是同一个对象返回true,反之返回false
        if(this == obj){
            return true;
        }
        
        //判断是否类型相同
        if(this.getClass() != obj.getClass()){
            return false;
        }
        
        User user = (User)obj;
        return userName.equals(user.userName) && password.equals(user.password);
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        User user = new User("xiaoming", "123");
        User user01 = new User("xiaoming", "123");
        System.out.println(user.equals(user01));
    }
}

           代码执行结果:true。

     我们还应该注意,Java语言对equals()的要求如下(来自Object的规范[JavaSE6]): 

     1. 对称性:如果x.equals(y)返回是"true",那么y.equals(x)也应该返回是"true"。

     2. 反射性:x.equals(x)必须返回是"true"。

     3. 类推性:如果x.equals(y)返回是"true",而且y.equals(z)返回是"true",那么z.equals(x)也应该返回是"true"。

     4. 一致性:如果x.equals(y)返回是"true",只要x和y内容一直不变,不管你重复x.equals(y)多少次,返回都是"true"。

     5. 非空性,x.equals(null),永远返回是"false";x.equals(和x不同类型的对象)永远返回是"false"。

     以上这五点是重写equals()方法时,必须遵守的准则,如果违反会出现意想不到的结果,请大家一定要遵守。

     整理了这篇博客之后,对于重写Object的equals()方法,总觉得缺了点东西。后来又整理了一些知识点。感兴趣的朋友可以前往读一读续重写equals()方法。

http://free9277.iteye.com/blog/1832363

     重写了equals方法,别忘了也要冲洗hashCode哦。请看另一篇博客,重写hashCode()方法http://free9277.iteye.com/admin/blogs/1832378

     由于本人能力有限,博客中的内容难免会有错误。请各位朋友评判指出,别让我一错再错,哈。非常感谢!

5
1
分享到:
评论

相关推荐

    重写toString和equals方法

    在 Java 中,每个对象都继承自 Object 类,而 Object 类中定义了两个重要的方法:toString() 和 equals()。这两个方法都是非常重要的,它们分别用于对象的字符串表示和对象比较。然而,在大多数情况下,我们需要重写...

    重写equals方法

    例如,public boolean equals(Object o) 是一个正确的重写方法,而 public boolean equals(String o) 是一个重载方法,而不是重写方法。 equals 方法的实现 ------------------------- equals 方法的实现需要遵循...

    关于Object中equals方法和hashCode方法判断的分析

    "关于Object中equals方法和hashCode方法判断的分析" 在 Java 中,Object 类提供了两个重要的方法:equals 方法和 hashCode 方法。这两个方法都是用于比较两个对象是否相等的,但它们的实现机理和作用域却有所不同。...

    equals方法的重写.docx

    // 重写object的equals方法 public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (this.getClass() != obj.getClass()) return false; Students other = ...

    重写equals和hashcode方法_equals_重写equals和hashcode方法_

    在Java编程语言中,`equals()` 和 `hashCode()` 方法是Object类中的两个核心方法,所有类都默认继承自Object类。这两个方法在处理对象比较和集合操作时起着至关重要的作用。当我们创建自定义类并需要对对象进行精确...

    关于重写equals,hashcode以及compareTo方法!

    equals()方法是Object类中的一个方法,它用于比较两个对象是否相等。然而,它的默认实现是比较对象的引用(地址),而不是比较对象的实际内容。因此,在某些情况下,我们需要重写equals()方法,使其比较对象的实际...

    C# Equals 和 GetHashCode 方法重写

    默认情况下,所有对象都继承自 `Object` 类,而 `Object` 类中的 `Equals` 方法仅基于引用比较来进行对象的相等性判断。这意味着即使两个对象具有相同的属性值,只要它们不是同一个内存地址,`Object.Equals` 方法也...

    重写hashCode()和equals()方法详细介绍

    在Java编程中,`equals()` 和 `hashCode()` 方法是Object类中的两个重要方法,它们在处理对象相等性以及在哈希表(如HashSet、HashMap)中起到关键作用。当自定义类时,有时需要根据业务逻辑重写这两个方法以满足...

    Java_重写equals()和hashCode()

    首先,`equals()` 方法是Object类中的一个基础方法,用于比较两个对象是否相等。默认情况下,它比较的是对象的内存地址,也就是引用是否相同。但在实际开发中,我们往往需要根据对象的内容来判断它们是否相等,这时...

    winform 重写Equals源码

    1. **使用`override`关键字**:在自定义类中,使用`override`关键字重写基类`Object`的`Equals`方法。 ```csharp public override bool Equals(object obj) ``` 2. **类型检查**:在`Equals`方法内部,首先检查...

    java中重写equals()方法的同时要重写hashcode()方法(详解)

    Java 中重写 equals() 方法的同时要重写 hashCode() 方法的重要性 在 Java 中,equals() 方法和 hashCode() 方法是两个紧密相关的方法,它们都是用于比较和标识对象的方法。equals() 方法用于比较两个对象的值是否...

    ==代替Object#equals() - 加速在容器类中搜索元素速度的可能性

    在Java编程中,`Object#equals()`方法是用于比较两个对象是否相等的标准方式,但它的性能可能并不总是满足高效容器类中元素搜索的需求。这篇博客"代替Object#equals() - 加速在容器类中搜索元素速度的可能性"探讨了...

    方法重写equals和多态

    在Java编程语言中,"方法重写equals"和"多态"是两个核心概念,尤其对于面向对象的设计和实现至关重要。下面将详细解释这两个概念及其相互关系。 **方法重写equals()** 在Java中,`equals()`方法是Object类的一个...

    java中的==和equals()方法1

    接下来是`equals()`方法,它是Object类的一个实例方法,用于比较对象的内容。默认情况下,`equals()`方法的行为与`==`相同,即比较对象的引用。但是,很多类(如String、Integer等)都重写了`equals()`方法,使其...

    浅谈java 重写equals方法的种种坑

    关于 Java 中重写 equals 方法的种种坑 Java 中的 equals 方法是一种用于比较对象是否相等的方法,它是 Object 类中的一个方法。然而,重写 equals 方法并不是一件简单的事情,因为它需要遵守一些约定,否则可能会...

    为什么在重写 equals方法的同时必须重写 hashcode方法

    在 Java 中,`equals` 和 `hashCode` 方法是 Object 类中的两个重要方法,它们用于比较对象的相等性。默认情况下,`equals` 方法比较的是两个对象的引用,即是否指向内存中的同一个位置,而 `hashCode` 方法则返回...

    重写Java中的equals方法介绍

    Java中的equals方法重写介绍 Java中的equals方法是一个非常重要的方法,它用于判断两个对象是否相等。在Java中,所有的对象都继承自Object类,而Object类中有一个equals方法,该方法用于判断两个对象是否相等。但是...

    学习Object类——为什么要重写equeals和hashcode方法

    在 Java 编程语言中,Object 类是所有类的父类,但是在实际开发中,我们往往需要重写 Object 中的 equals 和 hashCode 方法,以便正确地比较对象的逻辑内容,而不是内存地址。下面我们将详细地解释为什么需要重写这...

    equals与hashCode在实际开发中的重写写法

    这两个方法通常与`Object`类中的默认实现相关联,但为了在实际开发中实现正确的对象比较和哈希表操作,我们往往需要重写它们。以下是对这两个方法的详细解释以及在实际开发中的应用。 `equals()` 方法: `equals()`...

    Java中equals()方法重写实现代码

    Java中equals()方法重写实现代码详解 Java中equals()方法是Object类中定义的,作为所有类的父类,任何类都隐含地继承了该方法。 equals()方法用于判断两个对象的内容是否相同,如果没有重写该方法的类,需要重写该...

Global site tag (gtag.js) - Google Analytics