Java中的==和equals的区别


前言

在学习Java时经常遇到这个问题,虽然很简单,自己也会用,并且哪里该用==哪里该用equals()也是能辨别出来,但是不知道==equals()它俩有啥区别。

特此记录下此片文章,方便以后自己查询时不用再去Baidu、Google、Bing了

区别

1.== 直接判断两个变量名的值是否指向同一个内存空间地址 (如果都指向同一个内存空间地址的话就返回true)
2.equals() 直接判断两个变量名的值是否相同 (如果相同则返回true)


以上简单的说明了==equals()它们的区别,如果想看更详细的内容请继续往下看。

关系运算符 ==

关系运算符返回的是一个boolean类型结果,它计算的是值之间的关系

COPY
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int a=3;
int b=3;

System.out.println(a==b);

String str1 = new String("hello");
String str2 = new String("hello");
String str3 = new String("hello");

System.out.println(str2==str3);

str2 = str1;
str3 = str1;
System.out.println(str1==str2);

运行结果是true,false,true

解析:System.out.println(str2==str3); 为什么会返回false

因为String str2 = new String("hello");已经new了一个内存空间来存储hello

String str3 = new String("hello");又new了一个内存空间来存储hello

这里判断用的是==关系运算符,上面已经明确说明了== 判断两个变量名的值是否指向同一个内存空间地址(如果都指向同一个内存空间地址的话就返回true) 因此运行结果为false

如果使用的是equals()的话,返回结果则是true

那么会有人问,为什么b不会创建一个新的内存空间呢?

因为a已经创建了一个内存空间了,b就直接指向3了

说人话就是:

1.int b=3;就是使用别人创建好的,举个例子:A花钱建了个公共厕所,B就可以直接花钱使用

2.String str3 = new String("hello");就是别人建别人的,我建我自己的,举个例子:A花钱建了个公共厕所,B也要建一个公共厕所

【Lete乐特个人博客】:https://lete114.now.sh

Authorship: Lete乐特
Article Link: https://blog.imlete.cn/article/a3491c75.html
Copyright: All posts on this blog are licensed under the CC BY-NC-SA 4.0 license unless otherwise stated. Please cite Lete乐特 's Blog !