美文网首页
==与equals与hashcode

==与equals与hashcode

作者: 贝克街的猫大哥呀 | 来源:发表于2018-09-11 14:28 被阅读0次

== 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,说即是否是指相同一个对象。比较的是真正意义上的指针操作。

equals用来比较的是两个对象的内容是否相等,由于所有的类都是继承自java.lang.Object类的,所以适用于所有对象,如果没有对该方法进行覆盖的话,调用的仍然是Object类中的方法,而Object中的equals方法返回的却是==的判断。

也就是说,当没有重写equals方法时,在object中 equals 与 == 是一样的,就是指的对比内存地址。

hashCode原理

hashCode():计算出对象实例的哈希码,并返回哈希码,又称为散列函数。根类Object的hashCode()方法的计算依赖于对象实例的D(内存地址),故每个Object对象的hashCode都是唯一的(大概率);当然,当对象所对应的类重写了hashCode()方法时,结果就截然不同了。

之所以有hashCode方法,是因为在批量的对象比较中,hashCode要比equals来得快,很多集合都用到了hashCode,比如HashTable。

两个obj,如果equals()相等,hashCode()一定相等。

两个obj,如果hashCode()相等,equals()不一定相等(Hash散列值有冲突的情况,虽然概率很低)。

所以:

可以考虑在集合中,判断两个对象是否相等的规则是:

第一步,如果hashCode()相等,则查看第二步,否则不相等;

第二步,查看equals()是否相等,如果相等,则两obj相等,否则还是不相等。

所以说!当重写了equals,就是说,我现在不要比堆地址了,我要比实际的值! 这样就要把hashCode重写了,这样对象的hasoCode变一样的,来过第一步的验证!

相关文章

  • Interview之一:hashCode 与equals

    1、hashCode 与 equals Java中的equals方法和hashCode方法是Object中的,所以...

  • equals 与 hashCode

    equals 与 hashCode:前提: 谈到hashCode就不得不说equals方法,二者均是Object类...

  • 《Oracle Java SE编程指南》16-04:hashCo

    内容导航: 前言 1、hashCode方法 2、equals方法与hashCode方法关系 1、hashCode方...

  • Java 拆箱与装箱

    本文知识点 基本类型与引用类型 == 与 equals() 的区别 equals() 和 hashCode 的关系...

  • Java基础之hashcode与equals

    hashCode 与 equals (重要) 问题: HashSet如何检查重复? 两个对象的 hashCode(...

  • ==与equals与hashcode

    == 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,说即是否是指相同一个对象...

  • equals()与hashCode()与"=="

    如果类中没有重写 equals() 方法,则会使用父类( Object )中的 equals() 方法, Obje...

  • hashCode()与equals()

    equals()方法详解 equals()方法是用来判断其他的对象是否与该对象相等。equals()方法在obje...

  • equals与hashCode

    关于“==”操作符 众所周知,在Java中对于基本数据类型来说“==”操作符用于比较两个变量的值是否相等,而对于引...

  • Hashcode与equals

    首先equals()和hashcode()这两个方法都是从object类中继承过来的。 很明显是对两个对象的地址值...

网友评论

      本文标题:==与equals与hashcode

      本文链接:https://www.haomeiwen.com/subject/uodegftx.html