`
mmdev
  • 浏览: 13327911 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

【Java学习笔记 - 08】覆盖equals时请遵守通用约定

 
阅读更多

不覆盖equals的情况

1)类的每个实例本质上是唯一的;

2)不关心类是否提供了“逻辑想等”的测试功能;

3)超类已经覆盖了equals,从超类继承过来的行为对于子类也是合适的;

4)类是私有的或包级私有的,可以确定他的equals方法永远不会被调用。

<wbr></wbr>

应该覆盖equals的情况

如果类具有自己特有的“逻辑想等”概念,而且超类还没有覆盖equals以实现期望的行为,这时我们就需要覆盖equals方法。这通常属于“值类”的情形。

<wbr></wbr>

equals 方法在非空对象引用上实现相等关系

l<wbr>自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。 </wbr>

l<wbr>对称性:对于任何非空引用值 x 和y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。 </wbr>

l<wbr>传递性:对于任何非空引用值 x、y 和z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。 </wbr>

l<wbr>一致性:对于任何非空引用值 x 和y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。 </wbr>

l<wbr>对于任何非空引用值 x,x.equals(null) 都应返回 false。 </wbr>

<wbr></wbr>

实现高质量equals方法的诀窍

1)<wbr><wbr>使用==操作符检查“参数是否为这个对象的引用”;</wbr></wbr>

2)<wbr><wbr>使用instanceof操作符检查“参数是否为正确的类型”;</wbr></wbr>

3)<wbr><wbr>把参数转换成正确的类型;</wbr></wbr>

4)<wbr><wbr>对于该类中的每个“关键”域,检查参数中的域是否与该对象中对应的域相匹配(为了获得最佳性能,应该先比较最有可能不一致的域,或者开销最低的域,最理想的情况是两个条件同时满足的域);</wbr></wbr>

5)<wbr><wbr>当编写完equals方法后,应该问自己三个问题:它是否是对称的、传递的和一致的?</wbr></wbr>


分享到:
评论

相关推荐

    java学习笔记--第二天(list去重问题)

    在Java学习过程中,第二天的主题可能涉及了数据结构和集合框架中的一个重要概念——列表(List)的去重问题。这里我们主要探讨如何在Java中处理List的重复元素,以及可能涉及到的相关技术。 首先,让我们理解列表去重...

    Java-多态--学习笔记.docx

    例如,我们可以定义一个通用的`Animal`接口,然后让`Dog`和`Cat`等类实现这个接口,这样处理动物的行为时,只需要与`Animal`接口交互,而不关心具体是哪种动物。 2. **提高扩展性**:多态使得程序具有更好的扩展性...

    java学习笔记.pdf

    ### Java学习笔记知识点总结 #### 第一章:Java语言入门 - **1.1 Java的诞生** Java由Sun Microsystems公司于1995年推出的一种可移植、面向对象的编程语言。最初的设计目标是为消费电子产品提供一种通用编程语言...

    Java高手笔记-工程师必须知道的事

    Java高手笔记-工程师必须知道的事 本文档总结了Java开发中的一些常见问题和解决方案,涵盖了多线程、数据库事务、数据库索引、判等问题、数值计算、集合类、文件上传、日志、spring框架等方面。 并发工具 在Web...

    小码哥-任小龙Java笔记-面向对象的全部笔记

    ### 小码哥-任小龙Java笔记-面向对象的核心知识点 #### 一、面向对象基础概念 **1. 成员变量** - **定义位置**:成员变量定义在类中但不在任何方法内,分为类成员变量(使用`static`修饰)和实例成员变量(不使用...

    Java面试笔记-基础问题篇.docx

    Java是一种广泛使用的高级编程...以上仅是Java面试笔记中的部分知识点,实际面试中可能涉及更多细节和深入问题。对于求职者来说,熟练掌握这些基础知识,并能结合实际项目经验进行深入讨论,将有助于在面试中脱颖而出。

    前端开源库-shallow-equals

    "shallow-equals" 是一个专门用于浅层比较的开源库,它为开发者提供了便捷的方式来判断两个数据结构是否在表面级别(即只检查第一层属性)上相同。这个库尤其适用于那些性能敏感的场景,例如在React组件的...

    java实战经典学习笔记

    ### Java实战经典学习笔记知识点概览 #### 一、Java概述及开发环境搭建 - **Java概述** - Java是一种广泛使用的高级编程语言,由Sun Microsystems于1995年发布。 - Java的设计目标是“一次编写,到处运行”,这...

    JAVA学习笔记

    JAVA学习笔记涵盖了Java编程语言中多个核心概念和特性。通过讲解this关键字、继承、static关键字和代码块、final关键字、多态、方法重写、抽象类与接口、封装与隐藏、垃圾回收、类组合、包装类、对象处理、类成员、...

    java学习笔记

    ### Java学习笔记知识点详解 #### 一、Java面向对象编程思想 面向对象编程(Object-Oriented Programming, OOP)是Java的核心特性之一。通过封装、继承和多态这三个基本特征来实现。OOP能够提高代码的复用性和可...

    java基础学习笔记.doc

    Java是一种广泛使用的面向对象的编程语言,其基础知识是学习Java编程的基石。下面将详细讲解在给定的学习笔记...这些是学习Java编程时的基础内容,深入理解和熟练运用这些知识将有助于进一步学习更复杂的Java编程技术。

    JAVA学习笔记整理(全)

    JAVA学习笔记整理全面涵盖了从基础语法到高级技术的多个领域,包括数据库管理、Web服务器、缓存技术、框架、容器、网络、虚拟机、操作系统、数据结构和操作系统等多个方面。以下将详细介绍其中的关键知识点。 一、...

    计算机后端-Java-Java核心基础-第14章 面向对象06 14. 重写equals().avi

    计算机后端-Java-Java核心基础-第14章 面向对象06 14. 重写equals().avi

    前端开源库-fs-equals

    "fs-equals-master"可能是这个库的源码仓库主分支,包含所有相关的源代码、测试用例、文档和其他资源。如果你打算深入了解或定制这个库,可以从这个压缩包中提取源代码进行研究。通过阅读源代码,你可以学习到更多...

    计算机后端-Java-Java核心基础-第14章 面向对象06 13. equals()的使用.avi

    计算机后端-Java-Java核心基础-第14章 面向对象06 13. equals()的使用.avi

    java学习心得一些笔记

    Java学习心得笔记主要涵盖了几大知识点,包括运算符、Integer类、引用类型、数组、多维数组、字符串类。下面将详细阐述这些内容。 1. **运算符**: 在Java中,运算符包括移位运算符。`是左移运算符,将二进制数向...

    java基础知识-equals的使用

    equals() 是 Java 中的一个方法,用于比较对象是否相等。它是 Object 类的方法,在许多类中都可以使用。 在默认情况下,equals() 方法用于比较两个对象的引用是否相等,即判断它们是否指向同一个内存地址。这是通过...

    effective java 读书笔记

    - Item9:当覆盖equals时,必须同时覆盖hashcode,以保持哈希表的行为一致性。 - Item10:toString方法应返回对象状态的简洁表示,便于调试和日志记录。 - Item11:谨慎覆盖clone方法,因为它涉及到对象的深拷贝...

Global site tag (gtag.js) - Google Analytics