Java的"=="和equals方法究竟有什么区别

本篇内容介绍了“Java的"=="和 equals方法究竟有什么区别”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

创新互联"三网合一"的企业建站思路。企业可建设拥有电脑版、微信版、手机版的企业网站。实现跨屏营销,产品发布一步更新,电脑网络+移动网络一网打尽,满足企业的营销需求!创新互联具备承接各种类型的网站设计、做网站项目的能力。经过十余年的努力的开拓,为不同行业的企事业单位提供了优质的服务,并获得了客户的一致好评。

先说”==”:
对于基本数据类型  (byte,short,char,int,long,float,double,boolean)的变量”==”比较的是两个变量的值是否相等。
比如:int a = 3;  int b = 3;  a==b;返回就是true
对于引用类型如,则比较的是该变量所指向的地址.
拿我们最常用的String型来举例:
比如:String a = “abc”; String b = “abc”;
在这种情况下 字符串直接赋值给变量,该字符串会进入到常量池中,当第一次将 “abc”赋值给a的时候,会去常量池中找看有没有”abc”这个字符串,如果有的话,就将a指向该字符串在常量池中的地址,如果没有则在常量池中创建,第二次赋值 将 “abc”赋值给b的时候同样去常量池中找”abc”这个字符串,然后将他的地址赋值给b.
所以我们在做  a==b操作的时候返回的为true
再来看另一种情况:String a = new String(“abc”) ; String b = new String(“abc”);
这种情况下 创建出来的”abc”对象会被存储到堆,a和b指向的“abc”分别存储到堆内存的不同位置。a和b里面保存的是”abc”在堆里面的内存首地址,这两个地址明显是不同的,所以我们在做 a==b操作的时候返回的为false

再来看”equals”:
Equals方法是在Object类中定义的,所有的类都继承于Object类,所以所有的类都有equals方法。
我们来看看equals方法的源码:

public boolean equals(Object obj) {
return (this == obj);
}

可以看到在Object类的equals方法中也是用的”==”来进行比较,所以在进行比较时它和”==”应该时等价的,但是为什么我们在做 字符串比较的时候  两者比较出来的结果不一样呢?
原因就是 String类型对equals方法进行了重写。我们来看源码:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}

从源码我们可以看出,在String的equals方法中对字符串的字符进行了逐一比较如果都相同则返回true.所以对于String中的equals方法比较的是两个字符串的内容对于:
String a = new String(“abc”) ; String b = new String(“abc”);
由于a和b的内容相同,返回true.
总结:

  1. 对于字符串的比较“==”比较的是两个字符串的地址

  2. 对于字符串的比较 “equals”比较的是两个字符串的内容

“Java的"=="和 equals方法究竟有什么区别”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注创新互联网站,小编将为大家输出更多高质量的实用文章!


当前标题:Java的"=="和equals方法究竟有什么区别
网页链接:http://azwzsj.com/article/gppscs.html