zoukankan      html  css  js  c++  java
  • 【从零单排】Java双等号,Equals(),HashCode()小结

    默认情况 

    - 双等号==,比较的是内存地址。
    - equals(),默认比较的是内存地址。
    - hashCode(),默认返回的是object的内存地址。

    String中方法改写的情况

    经常会遇到需要override equals()和hashCode()的情况,比如String就改写了这两个方法。
     
    String equals() 的实现是首先判断两个字符串内存空间是否一致,然后对每一位字符进行比较。
    String hashCode() 的实现是对每一位字符*31然后累加。

    Equals()和HashCode()的契约

    Java中两者有一个契约:
    - 如果两个对象相等的话,即equals()返回true的时候,它们的hashCode()必须相等。
    - 但如果两个对象的hashCode()相等的话,这两个对象(用equals()判断)不一定相等。
     
    举例来说,在HashMap中存取键值对的时候用到了这两个方法:
    - 用hashCode()计算Entry在数组中的位置
    - 可能出现碰撞的情况,即多个Entry的hash code相同,存在同一个”格”中
    - 这时,需要用equals()来判断key是否相同
     
    一般来说equals()和hashCode()的override都是绑定出现的,因为要保证上述的契约关系。

    参考

  • 相关阅读:
    redis学习(四)
    redis学习(三)
    redis学习(二)
    redis学习(一)
    Maven入门(二)pom.xml和核心概念
    Maven入门(一)
    uni-app 引用
    uni-app 搜索栏
    Vue,组件切换-切换动画
    Vue,组件切换-方式2
  • 原文地址:https://www.cnblogs.com/maxstack/p/7645461.html
Copyright © 2011-2022 走看看