目录

1.概述

1.==解析

2.equals解析

3.源码图解

2.例子

1.jvm内存简图

2.第一个"=="比较的解析

3.第二个"=="比较的解析

4.第三个与第四个equals方法的解析


1.概述

1.==解析

对于基本数据类型来说,==比较的是其值是否相等

对于引用数据类型来说,==比较的是其对象在堆空间中内从地址是否相等

2.equals解析

Object类中equals方法源码比较的是堆内存地址是否相等

String类,Date类,包装类等都重写了equals方法,其都比较的是内容是否相等

3.源码图解

下图为Object类equals方法直接比较是否为同一个对象

下图为String类重写的equals方法比较内容是否相等

2.例子

package system.test1;
public class demo {public static void main(String[] args) {String s1 = new String("hello");String s2 = new String("hello");String s3=("hi");String s4=("hi");System.out.println(s3==s4);System.out.println(s1==s2);System.out.println(s1.equals(s2));demo d1=new demo();demo d2=new demo();System.out.println(d1.equals(d2));}
}

1.jvm内存简图

2.第一个"=="比较的解析

在编译String s3=“hi"的时候其实是jvm在常量池中创建了一个内容为"hi"的地址值,然后让s3去指向"hi”,而不是把"hi"直接赋值给s3; 在编译String s4=“hi"的时候常量池中已经有了"hi"的地址值,所以让s4直接指向常量池中的"hi”,这样s3和s4的地址值都是常量池中"hi"的地址值,所以通过双等号的运算结果是true。

3.第二个"=="比较的解析

String s1=new String(""hello)的时候,要记住每new一次就会出现一个新的对象,所以这种情况是直接在堆内存中开辟了一块新的空间去储存"hello",所以此时s1和s2的地址值是不一样的,所以==结果就为false。

4.第三个与第四个equals方法的解析

object类是所有类的父类,String类自然继承了object类,其中重写了equals方法,String类equals方法比较的是其内容.s1与s2自然比较的是字符串的内容,输出为true.

d1,d2调用的equals方法为object类的equals方法.其源码为比较对象地址是否相同.demo类实例化两个对象存在于堆空间中,它们各自拥有自己的内存空间.所以地址不同,输出为false

==与equals的区别(四个例子简单易懂)附jvm简图相关推荐

  1. 重写与重载 / 动静态分派调用(JVM字节码底层逐步解析,吃鸡例子简单易懂)

    面试混分巨兽!网络千遍一律标准答案如下: (1)两者都是面向对象中实现多态的方式,两者与父类方法名都必须相同,两者都允许子类根据自己需要重新实现父类方法. (2)重写是运行时的多态,重载是编译时的多态 ...

  2. git和github的区别与简介,简单易懂

    一开始接触git或是github的程序员可能搞不太清楚这些名词到底指代的是什么,所以在这里稍微说明一下,git和github是两个完全不同的概念. git是一个版本管理工具,是可以在你电脑不联网的情况 ...

  3. 灰狼优化算法--简单易懂附python代码

    ps:本博文为个人理解,如有错误请不吝赐教 本博文部分引用了 https://blog.csdn.net/haha0332/article/details/8880591*0 1.算法原理:简单的讲, ...

  4. CentOS 6 安装Hadoop 2.6 (四)运行简单例子

    CentOS 6 安装Hadoop 2.6 (一)准备工作 CentOS 6 安装Hadoop 2.6 (二)配置Hadoop CentOS 6 安装Hadoop 2.6 (三)问题收集 CentOS ...

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

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

  6. java中的==和equals的区别

    关于JAVA中的==和equals函数的区别 今天在研读Thinking in java 时注意到==和equals的区别,于是就通过查看JDK_API才读懂了他们的区别,于是将心得分享一下,望批评指 ...

  7. 四种比较简单的图像显著性区域特征提取方法原理及实现

    四种比较简单的图像显著性区域特征提取方法原理及实现-----> AC/HC/LC/FT. laviewpbt  2014.8.4 编辑 Email:laviewpbt@sina.com   QQ ...

  8. php xml对象解析_php解析xml 的四种简单方法(附实例)

    XML处理是开发过程中经常遇到的,PHP对其也有很丰富的支持,本文只是对其中某几种解析技术做简要说明,包括:Xml parser, SimpleXML, XMLReader, DOMDocument. ...

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

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

最新文章

  1. R语言ggplot2可视化散点图、移除可视化图像中的网格线(remove gridlines)
  2. Python_note4 程序控制结构+random库的使用
  3. Endnote如何一键更改参考文献?
  4. DNA Alignment
  5. codeblock socket 编译错误_从Linux源码看Socket(TCP)Client端的Connect
  6. 联想m7400pro更换墨粉盒怎么清零_佳能打印机怎么换墨水 佳能打印机换墨水注意事项【详解】...
  7. 【转】日志记录库(log4cxx)使用指南
  8. Android在代码中设置drawableLeft(Right/Top/Bottom)
  9. java web 不用框架_MyShop-不用框架的基础javaweb项目
  10. 如何判断程序猿在做什么
  11. 海思3519A配置NFS文件系统(永久)
  12. python课程-Python课程
  13. oracle 错误代码问题处理经验汇总
  14. 音乐流媒体应用Polaris
  15. matlab函数文件||脚本文件和函数文件的区别
  16. 古马其顿国王-亚历山大
  17. 如何处理phpmyadmin中访问被拒绝
  18. vue组件通信1:父传子(props)
  19. 2021年web前端基础面试题
  20. [python] 4.比心

热门文章

  1. mac下软件包管理brew
  2. 如何获得images.xcassets 中图片的路径?
  3. 物体抓取位姿估計算法綜述_基于深度学习的物体抓取位置估计
  4. csrediscore访问redis集群_搭建文档 | centos7.6环境下redis5.0.8集群搭建
  5. html5页面输出语句,使用html5输出文件
  6. mysql中数字格式化_mysql中格式化数字详解
  7. windows server 驱动精灵_大神教你如何在Win10中检查磁盘驱动器错误
  8. 未来的黑科技计算机作文简写,写一篇英文作文。“未来计算机的发展”
  9. Android端访问服务器核心代码
  10. 七天学会NodeJS