java中如何判断两个变量相等_Java中判断两个值相等到底是使用“==”还是“equal。。。

更新时间:2023-07-14 12:04:23 阅读: 评论:0

java中如何判断两个变量相等_Java中判断两个值相等到底是
使⽤“==”还是“equal。。。
⽤哪个
我们先不要着急选择;
先来看看使⽤它们分别输出的结果;
根据结果才好剖析它们;
先来看“==”号
chess怎么读如下图⽰:
上图⽰例分解:
再看 “equals”⽅法
我们再来使⽤equals看看结果,
会发现结果会有些许不同,
如下图⽰:
上图⽰例分解:
为了更好的便于我们理解,
我们进⼊源代码来逐⼀看⼀下;
源码浅析
⾸先我们先打开Object对象的equals;
如下图⽰:
根据万类之根Object对象的equals我们发现;
本质还是“==”来进⾏对⽐数值的;
只是Integer、String等进⾏⽅法重写⽽已。
我们再来看⼀下Integer包装类
(其他基本类型的包装类都类似在此就不⼀⼀举例了)
的 equals;
如下图⽰:
只是将包装类转换成int然后进⾏值对⽐;
⽽本质依然是使⽤的“==”
可能你会有疑问了;
既然本质都是⽤的“==”为什么String对象前、后两次输出的值不同呢?
【“==”的输出的是fal,“equals”输出的是true】
再回答问题之前我们先看看它的源代码;
String引⽤类型的equals的;jenna haze
如下图⽰:
我们看到判定对象如果是String实例的话,
就会将引⽤类型String转换成了基本类型char(
八年级下册英语单词跟读
进⾏循环⽐对,如果有不相同的值就返回fal。
简⾔之,就是将引⽤⽐较转换成了值⽐较(
我们事例使⽤equals对⽐的数值是”2”,
值是相同的,所以返回值是true。
从这个⾓度我们也能很好的理解为1、 基本类型对⽐的是值
2、 引⽤类型对⽐的是内存地址
这就能解释明明我们的Person实例;
⼀个赋值的是“张三”,⼀个赋值的“李四”;
结果为什么是相等的呢?
看了Object对象的equals源码我们才知道,
因为他们对⽐的不是值,⽽是内存地址,
为了验证,
我们来看下图:
上图⽰例分解:
我们可以看到输出的内存地址,
都是相同的;
那么返回true 也就⽆可厚⾮啦;
我们重新给开辟⼀个内存空间,并把原本赋值的“李四”改成与上个实例相对的“张三”后;会发⽣什么情况呢?
如下图⽰:
ipb上图⽰例分解:
有没有同学已经提前猜度啦呢?
内容是相同啦,
但内存是不同的,
它既然⽐对的是内存地址,
返回的结果当然也就由原来的true,变成fal啦。
重写toString() ⽅法
有聪明的同学或许会想到了;
workholic
我们上⽂不是刚说了吗?
引⽤类型String的equals⽅法;
能将引⽤⽐较转换成了值⽐较
我们将Person对象转换成String类型不就可以了吗?
26个字母的发音那我们来试试,
如下图⽰:
上图⽰例分解:
哎…
什么情况呢?
咋不⾏呢?
让我们进⼊到对象的toString()⽅法⾥来看下什么意思呢?
调⽤此⽅法给我返回的是;
对象的类名称 并 拼接⼀个16进制的hashcode码;
我们给他打印⼀下看看:
上图⽰例分解:
确实不相同;
不怪⼈家给返回fal。
那你可能要说了,
i dream a dream你可能⽓愤啦;
这个不对啊;
跟咱们上⾯说的不是相悖了吗?
别着急…
在职研究生成绩
这个toString()不⾏;
那咱们给就他造⼀个⾏的呗;
怎么造呢;
如下图⽰:
上图⽰例分解:
我们在Person的实体对象内,
使⽤Override注解重写toString() ⽅法,
hicc接着我们再次运⾏,看下效果
如下图⽰:
上图⽰例分解:
我们发现重写后的结果,
符合我们的预期。
hybird总结⼀下
到现在是不是你不是已经掌握了再使⽤的时候如何选择呢?
1、基本变量的⽐较⽅式我就⽤“==”
2、如果要⽐较实际内存中的内容,我们就要⽤“equals”⽅法
3、如果是我们⾃⼰定义的实例类,
我们⾃定义的类都是继承⾃object
从上⽂的源码分析推导出,
⽤“equals”或“==”都是⼀样的

本文发布于:2023-07-14 12:04:23,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/90/177119.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:对象   结果   源码   看看   类型
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图