前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >这种讲解equals和==区别的方式,全网第一!

这种讲解equals和==区别的方式,全网第一!

作者头像
网络技术联盟站
发布2019-10-31 17:44:46
4740
发布2019-10-31 17:44:46
举报

开始学习Java的总是被equals==混淆,即使看了相关的技术贴子,过一段时间也很容易忘记,那么有没有一种办法使得还在“淤泥”中挣扎中的攻城狮们过目不忘呢?或许本文对你会有所帮助,不信,你看看再说话。

首先咱来了解一下在JVM中内存分配的知识

在JVM中,内存分为堆内存和栈内存。它们的区别可以用下图来形象的解释:

暂且不管方法区。单看堆和栈。 TestClass testClass = new TestClass();,当我们创建对象TestClass()时候,就会调用TestClass的构造函数来开辟空间,将对象数据存储到堆内存中,与此同时在栈内存中生成对应的引用,在后续代码中调用的时候我们直接调用的是栈内存中的引用。

equals与==区别:

1.==是判断两个变量或实例是不是指向同一个内存空间,equals是判断两个变量或实例所指向的内存空间的值是不是相同 2.==是指对内存地址进行比较 , equals()是对字符串的内容进行比较 3.==指引用是否相同, equals()指的是值是否相同 用一张具有生命力的图直观表示一下他们之间的关系:

神总结:

  • == 比较如果说是基本数据类型比较的是值 如果是引用数据类型比较的是内存
  • equals 比较的是值
简单的用代码检验一下:
代码语言:javascript
复制
//a为一个引用
String a = new String("abcd" );
//b为另一个引用,a跟b的对象内容是一致的
String b = new String("abcd");
//把“abcd"放在常量池中
String c = "abcd";
//从常量池中查找“abcd"
String d = "abcd" ;
System.out.println(a == b);//false
System.out.println(a.equals(b));//true,在String中 equals方法被重写当物理地址不同时,会进一步比较值。
System.out.println(d == c);//true
System.out.println(c.equals(d));//true
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 网络技术联盟站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 首先咱来了解一下在JVM中内存分配的知识
  • equals与==区别:
  • 简单的用代码检验一下:
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档