`
20386053
  • 浏览: 461506 次
文章分类
社区版块
存档分类
最新评论

如果编写高效的equal方法

 
阅读更多

equals方法的特性:equals方法体现了等价性。

即:自反、对称、传递、一致(没有修改对象的比较信息)、任意非空对象与null equals返回false。

当:类的每个对象实例本质上是唯一的、不关心一个类是否提供了逻辑相等的测试功能、超类改写了equals方法子类继承也是合适的、一个类是私有的或包级私有的且确定equals方法永远不会被调用;这样就不需改写equals方法。

而对于值类如:Integer、Date等通常需要改写,以测试逻辑相等。

想要扩展一个可实例化的类,在添加新特性的同时还要保持equals方法约定通常是很难的。

高质量equals方法重写原则:

1.使用==操作检查实参是否为指向同一个对象的一个引用:性能上优化。

2.使用instanceof操作检查实参是否为正确的类型。

3.将实参转换到正确的类型:注意2已经确保转型的正确性了。

4.对于该类的每一个关键域检查实参中的域与当前对象中对应的域的值是否匹配。若以上所有测试都成功则返回true,否则返回false。

5.编写完成equals方法之后应该检查:他是否对称、传递和一致。

6.当你改写equals方法总要改写hashCode方法、不要企图让equals方法过于聪明、不要使equals方法依赖于不可靠的资源(一致性)。

7.不要将equals方法声明中的Object对象替换为其他类型。

hashCode约定:

1.一个程序在执行期间,若对象的equals方法作比较所用到的信息没有被修改则对象多次调用hashCode方法应始终返回同一个整数。

2.如果两个对象根据equals(Object)方法是相等的,那么调用这两个对象的hashCode方法应返回相同的整数。

3.如果两个对象根据equals(Object)方法是不相等的,那么调用这两个对象的hashCode方法不要求必须返回不用的整数。

分享到:
评论

相关推荐

    前端开源库-equal-pmb

    在前端开发领域,开源库是开发者们常用的工具,它们提供了丰富的功能,帮助我们高效地构建Web应用。"前端开源库-equal-pmb"这个项目似乎就是这样一个致力于解决特定问题的库,尤其关注值的相等性判断。"equal-pmb...

    Linux中高效编写Bash脚本的9个技巧

    ### Linux中高效编写Bash脚本的9个技巧 #### 1. 在脚本中多写注释 注释在任何编程语言中都是至关重要的,它们帮助开发者理解代码的功能和目的。在Bash脚本中,注释同样非常重要,尤其是在团队环境中或者当你未来...

    IOS纯代码编写

    在iOS开发中,纯代码编写是一种常见的方法,用于构建用户界面和实现应用功能。相比于使用Interface Builder,纯代码编写提供了更高的灵活性和控制力,尤其在处理复杂布局和动画时更为明显。本文档将深入探讨如何使用...

    判断L1等于L2是否为真

    综上所述,"判断L1等于L2是否为真"的程序使用C++编写,可能利用了STL的`std::equal`函数或自定义的循环比较方法,通过比较两个列表的所有元素来确定它们是否相等,并最终返回一个布尔值来表示比较结果。在实际应用中...

    fast-uuid用于快速高效地解析和编写UUID的Java库

    boolean isEqual = uuid.equals(anotherUuid); // 转换成16进制字符串 String hexString = uuid.toString(); ``` 总的来说,`fast-uuid`是Java开发者在处理大量UUID操作时的一个高效选择,它优化了标准库的不足,...

    NX二次开发UF-EVAL-is-equal 函数介绍

    NX二次开发UF_EVAL_is_equal 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等领域的专业人士,还是...

    Masonry 入门常用方法-1

    通过熟练掌握这些基础方法,开发者可以在编写iOS应用时更高效地进行界面布局。在实际项目中,结合Masonry的灵活性和Swift的可读性,可以使代码更加清晰,提升开发效率。在"压缩包子文件的文件名称列表"中的"Masonry...

    NX二次开发UF-CURVE-LINE-ARC-is-line-equal 函数介绍

    NX二次开发UF_CURVE_LINE_ARC__is_line_equal 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等领域...

    NX二次开发UF-CURVE-LINE-ARC-is-arc-equal 函数介绍

    NX二次开发UF_CURVE_LINE_ARC__is_arc_equal 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等领域...

    swift-EZAnchor-编写Autolayout的更简单更快捷的方法

    然而,尽管AutoLayout功能强大,但其原生API在编写约束时可能会显得复杂和冗长。这就是EZAnchor的用武之地,它为AutoLayout提供了一个更简洁、更易用的接口。 EZAnchor是由Alex Liubj创建的一个开源Swift库,它的...

    编写优化的sql语句.

    编写高效的SQL语句对于提升系统性能至关重要,尤其是在处理大量数据时。优化SQL语句能够减少查询时间,降低资源消耗,从而提高整体应用的响应速度。 1. **SQL优化器的作用** SQL优化器是数据库管理系统中的核心...

    NUnit软件测试快速入门

    在测试方法内部,我们创建了`Account`对象,模拟转账操作,并使用`Assert.AreEqual`方法进行断言,以确保转账后两个账户的余额正确。 完成代码编写后,需要编译生成`.dll`文件,然后使用NUnit GUI运行测试。打开...

    PandaJS 使用说明(1.9):编写测试

    在版本1.9中,它引入了对编写测试的支持,使得开发者能够更高效地确保代码的质量和稳定性。在本文中,我们将深入探讨如何使用PandaJS进行单元测试和集成测试。 ### 1. 测试框架集成 PandaJS 1.9内置了一个测试框架...

    用c++语言编写的比较两个数的程序

    本文将深入探讨如何在Visual C++环境下,使用C++语言编写比较两个数的程序,并介绍相关的C++基础知识。 首先,C++是一种静态类型的、编译式的、通用的、大小写敏感的、不仅支持过程化编程,也支持面向对象编程的...

    JAVA代码、方法、运算符大全

    Java是一种广泛使用的面向对象的编程语言,以其跨平台性、高效性和丰富的库而著名。本资源包"JAVA代码、方法、运算符大全"是针对Java初学者...通过学习和实践这些基本概念,你将能够编写出高效、可维护的Java应用程序。

    Comparison_C_code_same_string.rar_Same Same

    在编程领域,字符串比较是一个常见的任务,特别是在C#这样的高级编程语言中。本文将深入探讨如何在C#中实现字符串的比较,以及涉及到的相关知识点。...理解这些方法的用法和区别对于编写高效、准确的代码至关重要。

    Go-assertgo-在Go中添加条件编译断言的一个微小库

    这个库的目标是提供一个简洁且易于使用的API,帮助开发者更加高效地管理和测试他们的代码。 在Go的常规断言中,我们通常使用`assert.Equal`, `assert.True`, `assert.NotNil`等函数来检查预期值和实际值是否匹配。...

    探索NSObject的协议精髓:Objective-C中的基础方法解析

    ### 探索 `NSObject` 的协议精髓:Objective-C 中的基础方法解析 ...了解并掌握 `NSObject` 协议及其提供的基本方法,有助于开发者更好地管理和控制对象的行为,从而编写出高效、可靠且易于维护的代码。

    Go-Open-SourcingTester:轻量级测试工具类用于Go的测试包

    Go-Open-SourcingTester 是一个专为Go语言开发者设计的轻量级测试工具包,它提供了额外的功能,帮助开发者更高效、更全面地进行单元测试和集成测试。这个工具类库旨在增强Go标准库`testing`包的功能,使得测试代码...

    利用Jasmine编写的几个前端测试语句

    总的来说,Jasmine通过其简洁的API和丰富的功能,为前端开发者提供了一种高效的方式来编写和组织测试。结合良好的测试实践,如TDD(测试驱动开发)和BDD(行为驱动开发),Jasmine可以帮助确保你的JavaScript代码...

Global site tag (gtag.js) - Google Analytics