Java中equals和==区别

Java中equals和==区别

在这里插入图片描述
结果是
在这里插入图片描述

现在就来探索一下,为什么str1和str3会不等

学妹:学长,为什么结果会是这样啊?
:学妹莫怕,躲进我怀里,快来。看学长大威天龙收了这代码!
学妹:那我就看学长表演了,嘻嘻~
:学妹先让我给你复习下基本知识,让我把我的数年功力都传送给你。
学妹:好的,来吧,学长。

先说一个String的小知识,String对象(不使用new运算符生成)存储于java的MetaSpace(元数据区) 的常量池中,我们先看下不使用new运算符创建String对象的过程,比如创建对象为:String string = “我的对象”; ,创建过程为:先检查java的常量池中是否存在我的对象这个数据,如果有那么就把这个数据的地址给string。如果没有,就先存储我的对象,再把地址给string。

使用new运算符生成的对象存储于 JavaHeapjava堆),jvm上面是这么描述的:所有的对象和数组都会在堆内存分配空间。所以通过new运算符创建的String对象不通过new运算符创建的String对象根本就不存储在同一个地方,而对象存放的是一个地址,所以这两者地址上是不等的,而 == 就 是对地址的判断和比较。

学妹:那为什么equals为什么又相等了呢?
:当当当~就是这个

equals

我们都知道Object类是所有类的爸爸
Object: 叫爸爸!
Object类中的equals方法是:
在这里插入图片描述
学妹:那不就是 == 去判断了吗?为什么str1.equals(str3)会相等了呢?
:学妹,你不要急,且听我娓娓道来。话说五百年前,有一个类名叫String,他勇猛异常,在代码里三进三出,万码之中,斗气化码…
学妹:说人话。。
:其实String类重写了他老爸(Object)的equals方法,就是下面这样
在这里插入图片描述
学妹:我知道了,他是先进行地址比较,然后再使用字符去一个一个比较,如果不相等就返回false吗?
:没错,学妹真聪明。重写了equals的类还有FileDate等等。既然问题解决了,那待会一起吃个饭吗?
学妹:不了,我还要回去洗澡呢,下次吧,下次再约~
:小丑竟是我自己!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值