`
free9277
  • 浏览: 104582 次
  • 性别: 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

分享到:
评论

相关推荐

    面试官瞬间就饱了,重写equals函数,需要重写hashCode函数吗?

    String重写了equals方法,引用指向同一个地址,一定返回true。并且如果String包含的字符串 完全相同,同样返回true. public boolean equals(Object anObject) { if (this == anObject) { return true; } /

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

    Object 类是所有类的父类,其 equals 方法比较的是两个对象的引用指向的地址,hashcode 是一个本地方法,返回的是对象地址值。他们都是通过比较地址来比较对象是否相等的

    why在重写equals时还必须重写hashcode方法分享

    首先我们先来看下String类的源码:可以发现String是重写了Object类的equals方法的,并且也重写了hashcode方法

    javaee_tedu_day09.zip

    如果不是想使用object类,toString方法,可以重写此方法 equals方法 equals方法比较对象的是否相同 ==比较两个对象的内存地址 如果想表示对象的内容相同,返回true,则重写此方法 hashCode 返回一个hash code码,...

    Java的Object类讲解案例代码 equals()、hashCode()、finalize()、clone()、wait()

    通过该案例代码,你可以学习如何在自己的类中正确重写equals()、hashCode()、toString()等方法,提高代码质量和可读性。 经验丰富的Java开发者:即使你已经有一定的Java开发经验,仍然值得深入了解Object类的使用。...

    C#中Equals方法的常见误解

    而Object的派生类ValueTpye重写了Equals方法,它比较的是两个对象的逻辑等同性。 也就是说,在C#里,引用类型的默认Equals版本关注的是引用等同性,而值类型关注的是逻辑等同性。当然,这并不总能

    Java中hashCode和equals方法的正确使用

     hashCode()和equals()定义在Object类中,这个类是所有java类的基类,所以所有的java类都继承这两个方法。  使用hashCode()和equals()  hashCode()方法被用来获取给定对象的整数。这个整数被用来确定对象被...

    写一个类Student,包含三个属性学号id,姓名name和年龄age;要求覆盖基类Object中的ToString()方法和Equals()方法,使得直接输出Student对象时输出的是对象的id,name和age信息;并且当两个对象的学号相同时认为它们相等;

    要求覆盖基类Object中的ToString()方法和Equals()方法,使得直接输出Student对象时输出的是对象的id,name和age信息;并且当两个对象的学号相同时认为它们相等; 然后写一个主方法测试以上定义。

    探索equals()和hashCode()方法_动力节点Java学院整理

    equals():反映的是对象或变量具体...根类Object的hashCode()方法的计算依赖于对象实例的D(内存地址),故每个Object对象的hashCode都是唯一的;当然,当对象所对应的类重写了hashCode()方法时,结果就截然不同了。

    java中==和equals的区别

    前言 对于开发的程序员小伙伴,...equals:在Object中模式采用==比较,通常会重写 String对象重写了 equals,比较的是变量值 从上面我们笼统的来说明了一下两者的不同,那么接下来我们看看具体的区分 对象类型的比较

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

    个人学习终结成果:为什么要重新equals和hashCode方法?如何重写?站好马步需从j2se基础开始

    简单概括 ==跟equals的区别

    equals(父类是object,所以每个对象都会有equals):  ojbect的 (源代码的149行):出厂默认的话equals等价于 ==   string 类重写equals:比较的是每一个字符是否相等 hashCode(重写equals就一定要重写hashCode...

    java 面对对象编程.pdf.zip

    为什么重写 equals() 时必须重写 hashCode() 方法? String String、StringBuffer、StringBuilder 的区别? String 为什么是不可变的? 字符串拼接用“+” 还是 StringBuilder? String#equals() 和 Object#equals() ...

    ==和equals() 的比较

    ==和 equals ()都是用于...所以,通常override(重写/覆写)java.lang.0bject 类的中equals()方法 按照自己的需要,在equals()方法中定义对象相等的含义。 String.equals () 注意:当此方法被重写时,通常有必要重写ha

    Java 2023最新面试知识点总结.pdf

    equals是Object类的方法,Object对它的实现是比较内存地址,我们可以重写这个方法来自定义“相等”这个概念。比如类库中的String、Date等类就对这个方法进行了重写。综上,对于枚举类型和原始数据类型的相等性比较,...

    Java中的Object类详细介绍

    主要介绍了Java中的Object类详细介绍,本文讲解了Object类的作用、Object类的主要方法、Object类中不能被重写的方法、Object类的equals方法重写实例等内容,需要的朋友可以参考下

    安卓java读取网页源码-InterviewQuation:安卓面试的一些问题

    如果要比较堆中对象的内容是否相同,那么就要重写equals方法了。 3)默认情况(没有覆盖equals方法)下equals方法都是调用Object类的equals方法, 而Object的equals方法主要用于判断对象的内存地址引用是不是同一个...

    CompactFormatter

    然后需要重写 Equals 方法。 public override bool Equals(object obj) { if (!obj.GetType().Equals(typeof(Customer))) { return false; } else { Customer answer = (Customer)obj; return (answer.ID ==...

    实验2 类和继承(4学时)

    掌握Object类中equals方法和toString方法的覆盖方法。 二、实验内容 1、设计一个名为figure的图形软件包(package)。包中包含三角形、矩形、圆三个类。要求:(1)每个类都要构造方法并为成员设置get和set方法;(2...

    面试String的特点及重要方法(二)

    上期呢我们对String的基本构造方法,源码进行了简单的总结,这期我们看看它比较更有魅力的地方,...可以看出,Object中的equals方法其实就是==,而String中重写了equals()方法把他修改成比较两个字符串是否相等。源码如

Global site tag (gtag.js) - Google Analytics