深入理解== 和 equals 的本质区别

  • 简介
    • 区别:
      • 图解:
    • 注意点:
    • 源码分析:
    • 总结
    • 分享一波:程序员赚外快-必看的巅峰干货

简介

初学者常常被"= =“和‘equals ’所折磨,为什么,因为他们的大概意思相同,都是比较两个对象是否相等,而又不搞不清他们的具体比较两个对象相等的原理是什么,所以经常搞混淆,接下来我们就去仔细的剖析他们,真正理解什么时候用”= =",什么时候用equals
先统一看一下他们两个的区别,知道区别后再仔细研究他们的原理

区别:

==:它存在两个情况
1.当他比较两个基本类型时,判断的时两个基本类型的类型和值是否相同
2.当他比较两个引用类型是,判断的时两个引用类型的类型和地址是否相同

图解:

equels:最基本的equels方法其实就是= =,也就是说,最基本的equels也存在两个情况
1.当他比较两个基本类型时,判断的时两个基本类型的类型和值是否相同
2.当他比较两个引用类型是,判断的时两个引用类型的类型和地址是否相同
也就是说最基本的equels方法和= =完全一样

注意点:

请看清楚,我这里说的最基本的equels方法,什么是最基本的equels方法?

在这里我们要知道一个知识点:equels方法是Object类的方法,我们再代码中写的所有Class类都继承了Object的equels方法,所以我称Object类的equels方法是最基本的equels方法

源码分析:

我们再来看一下Object类的equels方法的源码

这下明白了吧!Object类的equels方法是直接点用了‘= =’,所以一开始我说:最基本的equels方法和==完全一样
那我们知道,继承的一大特点就是实现了java语言的多样性,而方法重写则是java语言多样性的实现原理之一。问题的重要点就在这里,继承Object类的子类对equels的重写导致了equels和= =的不同。具体哪里不同,这就要看怎么重写了。
给大家看一下一个重写了的,比如String,看图:

String的重写equals方法流程是这样的
第一步:判断引用地址是否相等,引用地址相等说明他们是同一个对象,说明值肯定相同,返回true
第二部:判断对象类型是否相同,类型不同,直接返回false
第三步:循环两个对象的字符,一一对比是否相同,都相同说明值相同,返回true
所以String重写的equals方法的总目的就是判断两个对象的值是否相同。

总结

所以总结下来就是说,==和我们日常用的equals方法哪里不一样,我们要去看他们怎么重写的equals方法,看完之后才能知道equals具体是怎么比较的。

分享一波:程序员赚外快-必看的巅峰干货

深入理解== 和 equals 的区别相关推荐

  1. 02 理解==与Equals()的区别及用法 1214

    02 理解==与Equals()的区别及用法 01 02 03

  2. java byte 判断相等_你真的了解Java中quot;==quot;和equals()的区别?

    部分面试资料链接:https://pan.baidu.com/s/1qDb2YoCopCHoQXH15jiLhA 密码:jsam 想获得全部面试必看资料,关注公众号,大家可以在公众号后台回复" ...

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

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

  4. Java中Object.equals与String.equals的区别

    基础知识 Java的存储空间:寄存器.栈.堆.静态存储区.常量存储区(常量池).其他存储位置. 此处重点介绍堆和常量存储区: 堆:存储new的对象; 常量池:用来存储final static.Stri ...

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

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

  6. [html] 说下你对组件、模块、元素的理解,它们的区别在哪里?

    [html] 说下你对组件.模块.元素的理解,它们的区别在哪里? 元素:元素是网页的一部分,在 XML 和 HTML 中,一个元素可以包含一个数据详情或者是一块文本或者是一张照片,亦或是什么也不包含. ...

  7. java ==和=_Java ==和equals()的区别

    前言 本篇文章讲的是从JVM角度比较==和equals的区别 一:** Java数据类型分类** Paste_Image.png 1:基本数据类型 又称为原始数据类型,他们之间的比较应该使用(==), ...

  8. 你真的知道 == 和 equals 的区别吗?

    让我们每天都有进步,老王带你打造最全的 Java 面试清单,认真把一件事做到极致. 在 Java 中 == 和 equals 的区别,感觉只有很少的人能才完全说正确. 常见的错误回答就是:== 基础类 ...

  9. Java中equals()和“==”区别

    Java中equals()和"=="区别 1.对于基础数据类型,使用"=="比较值是否相等: 2.对于复合数据类型(类),使用equals()和"== ...

最新文章

  1. 静态路由和默认路由的配置实例
  2. c++自带的可持久化平衡树?rope大法好!(超详细解答 + 5道例题讲解,可直接替代可持久化的线段树、并查集、平衡树!)
  3. 移动端高清、多屏适配方案
  4. JAVA基础之理解JNI原理
  5. 关于在呼叫中心业务中应用语音识别技术的探讨
  6. pyDash : Linux 性能监测工具
  7. python 中文识别 不用tesseract_Python——验证码识别 Pillow + tesseract-ocr
  8. python怎么设置图的大小_python – 如何调整seaborn中的子图大小?
  9. java解析xml文件四种方式介绍、性能比较和基本使用方法
  10. python数学建模可视化_数学建模之流程图和数据可视化
  11. 数仓系列 | 深入解读 Flink 资源管理机制
  12. jsp进入另一个jsp分块之后js代码失效_一个架构师的缓存修炼之路
  13. QuickTime Player 如何开启倍速播放?
  14. restfulframework详解
  15. 软件测试的错误优先级,软件测试典型错误
  16. 基于Verilog实现2ASK调制
  17. 搜苹果ipad版_春季课前第3轮评估! 安卓苹果电脑端全平台支持!
  18. PyQGIS开发者手册-4 使用栅格图层
  19. java判断天数_Java判断两个日期相差天数的方法
  20. PyQt5编程-鼠标事件

热门文章

  1. MySQL查询实验报告_实验报告数据库的基本查询'
  2. flat在java中的含义_Java 9中Collectors.flatMapping()方法的重要性?
  3. Java接口中的成员变量为什么必须是static ?
  4. C语言(CED)gameboy接馅饼问题
  5. C语言(CED)最长公共子序列----动态规划第一题
  6. layer文件ajax上传,layer弹出层数据传输到content里面
  7. make命令及makefile
  8. 文件另存为时名称会改变_易经:人处在困境时,不要焦虑,改变固定习惯,就会迎来转机...
  9. vuex中的值变化 页面重新渲染_浅谈浏览器的渲染过程,重绘与回流
  10. mysql 5.5.18下载_MySQL5.7.18下载和安装过程图文详解