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

续重写Object中的equals方法

阅读更多

      在覆盖equals方法的时候,我们必须遵守以下通用约定。(来自Object的规范[JavaSE6]): 

      1、反射性:x.equals(x)必须返回是"true"
      2、对称性:如果x.equals(y)返回是"true",那么y.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方法。如果我们违反了它们,那么我们的程序就会失去准确性,而且难于调试。 没有哪个类是孤立的,一个类的实例通常会被频繁地传递给另一个类的实例。有许多类,包括所有的集合类在内,都依赖于传递给它们的对象是否遵守了 equals约定。例如:Java中的集合类有两类:一类是List,一类是Set。前者允许集合内的元素可 以重复,后者则不允许集合中的元素可以重复。那么Java是如何判断集合中的元素是否重复呢?是通过对象中的equals()方法进行比较。因此 equals()的准确性及其重要。接下来的内容摘抄自《Effective Java》。

      实现高质量equals方法的诀窍:

      1、使用==操作符检查"参数是否为这个对象的引用"。
      2、使用instanceof操作符检查"参数是否为正确的类型"。
      3、把参数转换成正确的类型。
      4、对于该类中的"关键"域,检查参数中的域是否与该对象中对应的域相匹配。
      5、当你编写完成了equals方法之后,应该问自己三个问题:它是否对称的、传递的、一致的?

      作者给出的告诫:

      1、覆盖equals时总要覆盖hashCode。
      2、不要企图让equals方法过于智能。
      3、不要将equals声明中的Object对象替换为其他的类型。

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

分享到:
评论

相关推荐

    重写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在实际开发中的重写写法

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

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

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

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

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

    重写Java中的equals方法介绍

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

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

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

Global site tag (gtag.js) - Google Analytics