趣文网 > 作文大全

再也不要对java中==和equals的区别有困惑了 这篇文章保证你能懂

2020-11-24 02:55:01
相关推荐

想到你应该无数次看到过这个问题了,也可能你已经看过无数篇文章了,如果你还是一头雾水或者是不理解,那试着看看这篇文章,相信你一定能看懂。

一、理解”==“的含义

在java中,主要有两个作用。

1、基础数据类型:比较的是他们的值是否相等,比如两个int类型的变量,比较的是变量的值是否一样。

2、引用数据类型:比较的是引用的地址是否相同,比如说新建了两个User对象,比较的是两个User的地址是否一样。

OK。到这就注意了,你会发现,我在举引用的例子的时候,使用的是User对象,而不是String。别着急接着往下看。

二、理解equals的含义

先看看他的源码,equals方法是在Object中就有。注意了这里的源码是Object里面的equals。

从这个源码中你会发现,比较的是当前对象的引用和obj的引用是否相同,也就是说比较的默认就是地址。还记的在上面我们使用的是User而不是String嘛?在这里==比较的是引用的地址,equals也是比较的是引用的地址,所以他们的效果在这里是一样的。

现在你会发现好像equals的作用和==没什么区别呀,那String类型那些乱七八糟的东西是什么呢?继续往下看马上揭晓。

三、重写equals

1、String中equals方法

看到这个标题相信你已经能找到答案里,Object对象里面的==和equals没有什么区别,这样一看equals方法存在的意义真的不大,不过后来String在Object的基础之上重写了equals,于是功能被大大的改变了。如何重写的呢?我们去String的源码中找寻答案:

从上面的源码,我们能够获取到的信息是:String中的equals方法其实比较的是字符串的内容是否一样。也就是说如果像String、Date这些重写equals的类,你可要小心了。使用的时候会和Object的不一样。

2、测试String

看看下面的代码:

在上面的代码中,定义了三个字符串,分别使用==和equals去比较。为什么会出现这样一个结果呢?还需要从内存的角度来解释一下。

3、内存解释

在java中我们一般把对象存放在堆区,把对象的引用放在栈区。因此在上面三个字符串的内存状态应该是下面这样的。

现在明白了吧。

(1)String str1 = "Hello"会在堆区存放一个字符串对象

(2)String str2 = new String("Hello")会在堆区再次存放一个字符串对象

(3)String str3 = str2这时候Str3和Str2是两个不同的引用,但是指向同一个对象。

根据这张图再来看上面的比较:

(1)str1 == str2嘛?意思是地址指向的是同一块地方吗?很明显不一样。

(2)str1 == str3嘛?意思是地址指向的是同一块地方吗?很明显不一样。

(3)str2 == str3嘛?意思是地址指向的是同一块地方吗?很明显内容一样,所以为true。

(4)str1.equals(str2)嘛?意思是地址指向的内容一样嘛?一样。

(4)str1.equals(str3)嘛?意思是地址指向的内容一样嘛?一样。

(4)str2.equals(str3)嘛?意思是地址指向的内容一样嘛?一样。

OK。现在不知道你能理解嘛?

4、总结:

(1)、基础类型比较

使用==比较值是否相等。

(2)、引用类型比较

①重写了equals方法,比如String。

第一种情况:使用==比较的是String的引用是否指向了同一块内存

第二种情况:使用equals比较的是String的引用的对象内用是否相等。

②没有重写equals方法,比如User等自定义类

==和equals比较的都是引用是否指向了同一块内存。

5、一个小问题

当然了,String类型到这还没结束,有一个小问题需要大家注意一下。比如看下面的代码:

在这里多了一个intern方法。他的意思是检查字符串池里是否存在,如果存在了那就直接返回为true。因此在这里首先s1会在字符串池里面有一个,然后 s2.intern()一看池子里有了,就不再新建了,直接把s2指向它。

阅读剩余内容
网友评论
相关内容
小编推荐

大家都在看

小男孩自画像作文 成语猜猜猜作文 描写一线天的作文 关于勇敢的作文 原来你离我那样近作文 描写植物的作文200字 月球历险记作文 历年中考作文题目大全 记一件最难忘的事作文 总有一种力量让我作文 人生最贵的是青春作文600字 我家的小狗作文350 我的家乡英语作文高中 描写汽车外形的作文 关于巾帼英雄的作文 写梅花的作文600字 手机为题的作文 战胜挫折的作文600字 走着走着就长大了作文 三年级作文我喜欢小猫 想象作文题目 作文没写完 家人的关爱作文300字 睡梦中的妈妈作文 我的理想大学作文800 关于母爱的作文开头和结尾 四年级作文观察蚂蚁 友谊伴我行作文600字 一个性格鲜明的人作文 3年级300字作文