`
colincome
  • 浏览: 6357 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

equal和hascode

    博客分类:
  • JAVA
阅读更多
1. ==
首先说明一下==,对对象来说,==比较的是对象的物理地址,即如果两个对象相等,他们一定是一个对象。

2.Equal
==比较的是对象的地址,如果需要比较对象的值,就需要equal方法了。
看一下JDK中equal方法的实现:
Java代码
public boolean equals(Object obj) {  
    return (this == obj);  


public boolean equals(Object obj) {
return (this == obj);
}
也就是说,默认情况下比较的还是对象的地址。所以如果把对象放入Set中等操作,就需要重写eqaul方法了。
重写equal方法满足的5原则:
1. 自反性, x.equal(x);
2. 对称性, x.equal(y), y.equal(x)
3. 传递性
4. 一致性,多次调用都保持一致
5. 永远不等于null.

因此重新equal步骤:
1) ==比较
2)instanceof (此句包含的null的比较,因为null不是任何object的实例)
3)attribute比较

3.hashcode
hashcode的作用:
为了便于对象的检索,Set内部对象是用哈希表来存储,同时已对象的hashcode做key.因此比较重复对象的时候,首先首先通过hashcode检索对应的位置,如果有多个元素,则通过equal方法判断。因此两个对象equal,但没有相同的hashcode,就会造成重复的存储,破坏了set的原则。也可以这样理解,相等的对象(equal)一定要存储在同一个位置(hashcode)。
JDK中对于hashcode的限定:
1)一致性,多次调用同一对象,返回的hashcode应该是一样的
2)两个对象equal,一定要有相同的hashcode
3) 两个不equal的对象,不需要一定不同的hashcode
总结来说,就是对象equal,必须有相同的hashcode;有相同的hashcode,并不一定equal.
因此重写equal的时候一定要重写hashcode

转自:http://flynndang.iteye.com/blog/424397
分享到:
评论

相关推荐

    equal与==区别

    在Java编程语言中,`equal`方法和`==`操作符都是用来比较对象之间是否相等的工具,但它们之间存在重要的差异。本文将从三个方面进行详细的对比分析:字符串的比较、非字符串对象的比较以及基本数据类型的比较。 ###...

    java中hashcode()和equals()方法详解

    在Java编程语言中,`hashCode()`和`equals()`方法是非常重要的概念,它们不仅对于深入理解Java内存管理至关重要,也是实现自定义类的关键部分之一。本文将详细介绍这两个方法的工作原理、使用场景以及它们之间的关系...

    led图文控制系统V5.33专为EQUAL LED控制器配套使用

    LED图文控制系统V5.33是一款专为EQUAL LED控制器设计的应用程序,旨在提供高效、便捷的方式来管理和控制LED显示设备上的图文信息。此系统是LED显示屏管理的重要工具,它集成了多种功能,允许用户轻松创建、编辑和...

    前端开源库-equal-pmb

    在深入研究equal-pmb库之前,开发者应该首先阅读README.md文件,了解如何安装和使用该库。然后,查看src中的源代码,理解其实现原理。测试目录可以帮助我们确认库的功能是否正常工作。此外,对于贡献者来说,了解...

    jQuery实现表单验证------equalTo方法

    在IT行业中,jQuery是一个广泛...总之,jQuery的`equalTo`方法是表单验证中的一个强大工具,结合jQuery Validate插件,我们可以轻松实现各种复杂的表单验证逻辑,从而在Web应用中为用户提供更加友好和安全的交互体验。

    MATLAB中isequal函数转化为C语言,有项目算法使用matlab中isequal函数进行运算,这里需要将转化为C语言

    在MATLAB中,`isequal`不仅比较数值的精确性,还考虑了特殊值如NaN(非数字)和NaT(非时间)的情况。在C语言中,没有直接对应的函数来实现相同的功能,因此需要自定义一个类似的函数来满足需求。 MATLAB的`isequal...

    3 Java中关于==和equal的区别 以及equals()方法重写

    Java 中关于 == 和 equal 的区别 及其 equals() 方法重写 Java 语言是 Sun 公司的开发成果,其主要特点是可以执行强,与平台的无关性使其实用性更强。但是 Java 中的 == 与 equal 是有区别的。 == 操作符是 Java ...

    fast-deep-equal:最快的深度相等检查,支持 Date、RegExp 和 ES6 Map、Set 和类型数组

    最快的深度等于 ES6 Map、Set 和 Typed 数组支持。 安装 npm install fast-deep-equal 特征 兼容 ES5 适用于 node.js (8+) 和浏览器 (IE9+) 按值检查 Date 和 RegExp 对象的相等性。 ES6 equal ( require('fast-...

    无法解决 equal to 操作的排序规则冲突

    ### 无法解决 equal to 操作的排序规则冲突 在处理SQL查询时,有时会遇到一个错误:“无法解决 equal to 操作的排序规则冲突”。这个问题通常出现在执行涉及不同排序规则(Collation)的数据表间的联接操作时。为了...

    node-deep-equal, 节点算法的assert.deepEqual.zip

    node-deep-equal, 节点算法的assert.deepEqual 的深度相等节点的assert.deepEqual() algorithm 作为独立模块。这个 MODULE的速度比在 try/catch 中封装 assert.deepEqual() 快2 倍。 示例var equal

    plus_equal_scalar.rar_plus

    本文将深入探讨“plus_equal_scalar”这一主题,以及与之相关的文件“quotearg.c”,“plus_equal_scalar.pass.c”和“quotearg.h”。这些文件通常与C语言编程相关,涉及到字符串处理和函数库的实现。 首先,让我们...

    equal risk bounding is better than risk parity for portfolio selection.pdf

    然而,根据《Equal Risk Bounding is better than Risk Parity for portfolio selection》的研究,风险平价方法在理论上被一种名为“平等风险边界”(Equal Risk Bounding,ERB)的方法所超越。 ERB策略并不强制...

    Java_详解_1、==和Equal

    Java_详解_1、==和Equal用法与比较

    his_equal.v

    his_equal.v

    Matlab.zip_equal3zg_matlab源代码

    "Matlab.zip_equal3zg_matlab源代码"是一个压缩包,其中包含了多个MATLAB编程的源代码文件,特别适合那些刚开始学习MATLAB编程的新手。MATLAB是一种强大的数学计算和数据分析环境,广泛应用于工程、科学计算以及数据...

    node-deep-equal:节点的assert.deepEqual算法

    深平等Node的assert.deepEqual...例var equal = require ( 'deep-equal' ) ;console . dir ( [ equal ( { a : [ 2 , 3 ] , b : [ 4 ] } , { a : [ 2 , 3 ] , b : [ 4 ] } ) , equal ( { x : 5 , y : [ 6 ] } , { x : 5

    hist_equal.zip_idl中histequal_idl直方图均衡_直方图均衡化

    在这个名为“hist_equal.zip”的压缩包中,包含两个与直方图均衡化相关的IDL程序文件:`hist_equal_02.pro` 和 `he_hist_equal_12_1.pro`。 首先,我们来理解一下直方图均衡化的概念。直方图是描述图像像素灰度值...

    JAVA Integer == equal 比较 doc 比较大小 是否相等

    结果将是 "i1==i2",因为 i1 和 i2 引用的是同一个对象。 然而,如果我们将代码修改为: ```java Integer i3 = 200; Integer i4 = 200; if (i3 == i4) { System.out.println("i3==i4"); } else { System.out....

    Design of Equal Precision Frequency Meter Based on FPGA.pdf

    标题和描述中提到的知识点集中在基于FPGA的等精度频率计的设计方法上。FPGA(Field-Programmable Gate Array,现场可编程门阵列)是一种可以通过软件编程来配置的集成电路。它们具有逻辑单元的可编程性、硬件可重复...

    range_size_hash_equal.rar_range

    版本为2.13.6的图形库源代码,具体是关于"range_size_hash_equal.rar_range"的实现,这通常与图形渲染中的像素覆盖模式——“四边形纹章”(quad stipple)有关,以及可能的范围大小管理和哈希平等操作。 "四边形纹章...

Global site tag (gtag.js) - Google Analytics