`
javawebsoa
  • 浏览: 418106 次
社区版块
存档分类
最新评论

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学习笔记.pdf

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

    effective java 读书笔记

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

    JAVA学习笔记

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

    java学习笔记

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

    JAVA学习笔记整理(全)

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

    java基础学习笔记.doc

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

    java学习心得一些笔记

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

    java se学习笔记

    【Java SE学习笔记】是针对Java...以上就是【Java SE学习笔记】可能覆盖的主要知识点,这些内容对于初学者来说是构建Java编程基础的基石,通过深入学习和实践,能够为后续的Java EE开发或Android开发奠定坚实的基础。

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

    在Java编程语言中,了解如何正确使用`==`和`equals()`方法是非常关键的,因为它们在比较对象和基本类型时有不同的行为。下面将详细解释这两个方法的工作原理、使用场景以及一些常见误区。 首先,`==`运算符主要用于...

    JAVA学习笔记(全面)

    ### JAVA学习笔记(全面) #### 一、Java技术基础 ##### 1.1 编程语言 编程语言是计算机能够理解和执行的一种指令集。根据不同的编程思维和应用场景,编程语言可以分为以下几类: - **机器语言**:由二进制代码...

    java笔记java笔记java笔记

    以上就是从给定的信息中整理出来的Java学习笔记的主要知识点。这些知识点涵盖了Java的核心内容和技术,对于初学者和进阶者都非常有用。深入理解和掌握这些知识点,对于成为一名优秀的Java开发者至关重要。

    Java中的==和equals区别

    ### Java中的`==`与`equals`方法的区别详解 在Java编程中,比较对象的相等性是一个常见的需求,但很多初学者对于`==`运算符与`equals`方法的区别容易混淆。本文将深入探讨两者之间的差异,以及它们在不同场景下的...

    入门必备Java学习笔记

    "入门必备Java学习笔记"这个资源,正如其名,旨在帮助初学者掌握Java编程的基础,并逐步深入理解其核心概念。这本书涵盖了Java Standard Edition (Java SE) 的API,Javalang的基本元素,以及数据库连接技术JDBC和...

    长期总结的java学习笔记

    【Java学习笔记】 Java是一种广泛使用的编程语言,以其跨平台性、面向对象特性和安全性而闻名。Java的优点在于它的字节码技术使得程序能够在不同操作系统上运行,无需重新编译,这得益于Java虚拟机(JVM)。此外,...

    java学习笔记.docx

    ### Java学习笔记知识点详解 #### JDBC (Java Database Connectivity) **加载数据库驱动** - 在使用JDBC之前,首先需要加载对应的数据库驱动。对于SQL Server来说,通常使用的类名为`...

    个人的java学习笔记

    根据提供的“个人的Java学习笔记”中的描述与内容,我们可以整理出以下关键知识点: ### Java基础知识 #### 字符串(String) - **定义与创建**:字符串是不可变的对象,通常通过两种方式创建:直接赋值如 `String...

    JAVA学习笔记1

    ### JAVA学习笔记1 #### 一、Java基础 ##### 0) 第一个Java程序 - **概念**: 这是Java程序的基本结构示例,展示了如何编写一个简单的Java程序来输出“Hello World!”。 - **代码解析**: - `public class java` ...

    java笔记 java笔记

    - **简单性**:Java语言设计简洁明了,易于学习和使用。 - **健壮性**:Java拥有严格的错误检测机制,有助于开发健壮的应用程序。 #### 1.2 运行原理 Java程序的运行分为几个阶段: 1. **编写**:使用文本编辑器...

    Java学习笔记一

    在Java学习笔记中,我们将详细探讨这些主题,并通过实例和练习来加深理解。例如,我们可以创建一个简单的继承和多态示例,如定义一个抽象的动物类,然后创建具体的狗和猫类,这两个子类可以覆盖父类的`makeSound()`...

Global site tag (gtag.js) - Google Analytics