equals()方法

   Object类中的equals方法和“==”是一样的,没有区别,即俩个对象的比较是比较他们的栈内存中存储的内存地址。而String类,Integer类等等一些类,是重写了equals方法,才使得equals和“==不同”,他们比较的是值是不是相等。所以,当自己创建类时,自动继承了Object的equals方法,要想实现不同的等于比较,必须重写equals方法。

  当我们new一个对象时,将在内存里加载一份它自己的内存,而不是共用!对于static修饰的变量和方法则保存在方法区中,只加载一次,不会再多copy一份内存。所以我们在判断俩个对象逻辑上是否相等,即对象的内容是否相等不能直接使用继承于Object类的equals()方法,我们必须得重写equals()方法,改变这个方法默认的实现。

  重写equals方法:先判断比较对象是否为null—>判断比较对象是否为要比较类的实例—–>比较俩个成员变量是否完全相等。

hashcode()方法:

  当Set接收一个元素时根据该对象的内存地址算出hashCode,看它属于哪一个区间,再这个区间里调用equeals方法。这里需要注意的是:当俩个对象的hashCode值相同的时候,Hashset会将对象保存在同一个位置,但是他们equals返回false,所以实际上这个位置采用链式结构来保存多个对象。

  但一个面临问题:若两个对象equals相等,但不在一个区间,因为hashCode的值在重写之前是对内存地址计算得出,所以根本没有机会进行比较,会被认为是不同的对象。所以Java对于eqauls方法和hashCode方法是这样规定的: 
  1. 如果两个对象相同,那么它们的hashCode值一定要相同。也告诉我们重写equals方法,一定要重写hashCode方法,也就是说hashCode值要和类中的成员变量挂上钩,对象相同–>成员变量相同—->hashCode值一定相同。 
  2. 如果两个对象的hashCode相同,它们并不一定相同,这里的对象相同指的是用eqauls方法比较。

  注:如果我们将对象的属性值参与了hashCode的运算中,在进行删除的时候,就不能对其属性值进行修改,否则会出现严重的问题。

转载于:https://www.cnblogs.com/nictang/p/9166628.html

hashcode()和equals()的区别相关推荐

  1. 二十六、深入HashCode与equals的区别(上篇)

    @Author:Runsen @Date:2020/6/2 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排名 ...

  2. java中hashcode和equals的区别和联系

    理解: 规范1:若重写equals(Object obj)方法,有必要重写hashcode()方法,确保通过equals(Object obj)方法判断结果为true的两个对象具备相等的hashcod ...

  3. hashCode与equals的区别与联系

    一.equals方法的作用 1.默认情况(没有覆盖equals方法)下equals方法都是调用Object类的equals方法,而Object的equals方法主要用于判断对象的内存地址引用是不是同一 ...

  4. (转)从一道面试题彻底搞懂hashCode与equals的作用与区别及应当注意的细节

    背景:学习java的基础知识,每次回顾,总会有不同的认识.该文系转载 最近去面试了几家公司,被问到hashCode的作用,虽然回答出来了,但是自己还是对hashCode和equals的作用一知半解的, ...

  5. hashcode的作用_看似简单的hashCode和equals面试题,竟然有这么多坑!

    hashCode()方法和equals()区别与联系这到面试题,看似简单,根据以往面试星友的情况来说,绝大部分人都不能很好的回答出来,要么没有逻辑,想到一句就说一句,要么抓不住重点,答非所问.从这个很 ...

  6. 看似简单的hashCode和equals面试题,竟然有这么多坑!

    作者:徐刘根,大家都喊我根哥! hashCode()方法和equals()区别与联系这到面试题,看似简单,根据以往面试星友的情况来说,绝大部分人都不能很好的回答出来,要么没有逻辑,想到一句就说一句,要 ...

  7. equals的效率_看似简单的hashCode和equals面试题,竟然有这么多坑!

    点击上方"Java后端技术",选择"置顶或者星标" 你关注的就是我关心的! hashCode()方法和equals()区别与联系这到面试题,看似简单,根据以往面 ...

  8. hashCode() 和equals() 区别和作用

    HashSet和HashMap一直都是JDK中最常用的两个类,HashSet要求不能存储相同的对象,HashMap要求不能存储相同的键. 那么Java运行时环境是如何判断HashSet中相同对象.Ha ...

  9. 面试必问一:Java 中 == 和 equals 的区别你知道吗

    面试必问一:Java 中 == 和 equals 的区别你知道吗 前言 关于这个问题,一般初中级面试中都会遇到,还记得我当初实习找工作的时候也遇到了这个问题,现在都还记得自己是怎么回答的:== 是基本 ...

  10. 【重难点】【Java基础 03】hashCode() 和 equals()、代理模式

    [重难点][Java基础 03]重写hashCode() 和equals(). 文章目录 [重难点][Java基础 03]重写hashCode() 和equals(). 一.hashCode() 和 ...

最新文章

  1. C++:文件操作2 文本文件和二进制文件的读写
  2. 设计模式 之美 -- 面向对象(C/C++分别实现)
  3. 触发bfc的html元素,什么是BFC? CSS 使用伪元素清除浮动的方法
  4. PaaS云计算平台服务商大集合
  5. 电脑上装蓝牙_指甲盖变触控板,隔空就能操控手机和电脑!
  6. linux redis客户端,Redisson 3.4.0和2.9.0发布,Redis客户端
  7. Anaconda是什么?Anconda下载安装教程 - Python零基础入门教程
  8. rpm打包的流程包括以下哪些_Linux 下RPM打包制作流程
  9. 超详细!使用 LVS 实现负载均衡原理及安装配置详解
  10. 联想IdeaPad 720S-14IKB Compal CIZVO_S0 LA-E581P Rev 2A笔记本PDF点位图
  11. HTTPS中的证书、SSL证书、X509证书 初探 讲解
  12. 【艾特淘】淘宝保证金催缴单在哪里,要怎么交?
  13. VBA多工作簿中多工作表分类汇总
  14. PCB设计经典资料学习汇总
  15. ios 操作通讯录联系人
  16. [论文解读 IJCAI 19] LogAnomaly Unsupervised Detection of Sequential and Quantitative Anomalies
  17. 51Nod 1378 夹克老爷的愤怒
  18. 安卓sdk开发!阿里面试100%会问到的JVM,架构师必备技能
  19. iOS爱康APP组件化架构
  20. 详解关于int a[2][3]={{1},{2,3}}二位数组运算的问题

热门文章

  1. Node.js中使用pipe拷贝大文件不能完全拷贝的解决办法
  2. java JVM常见的四大异常及处理方案
  3. js关于两个字符串的加减乘除运算
  4. 使用 Visual Studio 2012进行C语言开发
  5. java集合系列——List集合之ArrayList介绍(二)
  6. 无敌打印(适用各种浏览器自带打印功能)
  7. 学好 Python 的 11 个优秀资源【转载】
  8. 精装友好联络算法实现借壳和RI
  9. Microsoft .NET Framework 3.5 SP1 简体中文精简版+.net
  10. centos6 docker1.7 存储方式修改