`
bingooh
  • 浏览: 53280 次
  • 性别: Icon_minigender_1
  • 来自: 佛山
社区版块
存档分类
最新评论

3.8 覆盖equals()时遵守一般规范

 
阅读更多

Object的equals()使用“==”进行比较。即如果2个对象具有相同的内存地址,那么这2个对象相同。

 

以下情况不需要覆盖equals():

1.类的每个实例本来就是唯一的,如Thread类

 

2.不关心类的实例逻辑上是否相等(logical equality),如一般不关心两个Random对象是否产生相同的随机数序列

 

3.父类的equals()适用于子类,则子类不用再进行覆盖。如AbstractList,AbstractMap的equals()适用于子类

 

4.类是private的,永远不需要调用equals()。但是建议仍覆盖equals()直接抛出异常

 

对于值类(value class),如Integer,Date。并且不满足以上情况,需要覆盖equals()方法。覆盖时的基本原则可参考Object的equals()方法说明

 

需要注意的地方:

1.如果子类在equals()增加了一个值比较,那么没有办法保证子类的equals()仍然满足覆盖equals()的基本原则。如Timestamp的equals()增加了nanosecond属性的比较,所以Timestamp的equals()不满足基本原则(待测试,可使用composition替代extends解决此问题)

 

2.如果覆盖了equals(),那么必须同时覆盖hashCode()

 

3.建议使用Apache Commons的EqualsBuilder覆盖equals()

 

分享到:
评论

相关推荐

    Java 覆盖equals时总要覆盖hashcode

    主要介绍了Java 覆盖equals时总要覆盖hashcode的相关资料,这里附有实例代码,具有参考价值,需要的朋友可以参考下

    equals(Object) 与 == 的区别

    "equals(Object) 与 == 的...例如,在比较两个字符串是否相同时,我们应该使用 equals(Object) 方法,而不是 == 运算符。 equals(Object) 与 == 的区别是非常重要的,我们需要正确地理解和使用它们,以避免编程错误。

    hashcode和equals方法

    equals()和hashcode()这两个方法都是从object类中继承过来的。当String 、Math、还有Integer、Double。。。。等这些封装类在使用equals()方法时,已经覆盖了object类的equals()方法.

    java_equals用法

    java_equals用法,用来熟悉重写equals方法的

    equals问题经典

    equals的源代码: public boolean equals(Object obj){ return (this==obj); } 那么s1.equals(s2)的返回值不就是 (s1==s2) 吗? 但是s1.equals(s2);结果为true s1==s2; 结果为false 问题三: class Student{ ...

    重载equals方法示例

    重载equals方法示例重载equals方法示例重载equals方法示例重载equals方法示例重载equals方法示例

    重写equals方法

    本文讲述了什么时候重写equals方法和如何重写equals方法。

    java中equals和==的区别

    能够加强对java中equals与==区别的理解。

    Java中equals方法隐藏的陷阱

    Java中equals方法隐藏的陷阱

    winform 重写Equals源码

    winform 重写Equals源码! 很值得下载看看!资源免费,大家分享!!

    Java理论与实践:hashCode()和equals()方法

    本文还介绍了定义对象的相等性、实施equals()和hashCode()的需求、编写自己的equals()和hashCode()方法。通过统一定义equals()和hashCode(),可以提升类作为基于散列的集合中的关键字的使用性。

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

    equals():反映的是对象或变量具体的值,即两个对象里面包含的值--可能是对象的引用,也可能是值类型的值。 hashCode():计算出对象实例的哈希码,并返回哈希码,又称为散列函数。根类Object的hashCode()方法的...

    java 资料 equals 与== 的区别

    java 资料 equals 与== 的区别

    重写toString和equals方法

    重写toString和equals方法的意义以及方法

    知识点 比较运算符==和equals方法的比较

    知识点 比较运算符==和equals方法的比较 知识点 比较运算符==和equals方法的比较

    2.javaequals()方法.zip

    2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2.javaequals()方法.zip2....

    Java语言深入_equals

    Java语言深入_equals

    ==和equals的区别

    java中比较值大小,==和equals的区别,基本数据类型和引用数据类型比较值方法

    java中equals和==的区别.doc

    java中equals和==的区别.doc java中equals和==的区别.doc

    equals方法的重写.docx

    equals方法重写作业,Students类,有三个属性id ,name ,grade。还有一个测试类用于测试创建了三个对象前两各对象的数据完全一样,第三个对象的数据不同。使用equals方法比较。并输出结果。

Global site tag (gtag.js) - Google Analytics