java基础之 “==”与“equals”区别详解
对于初学java的人来说,在面对数值比较的时候,我们大多数会采用“==”的方式来进行比较,但是java中给我们提供了equals()方法,这时候很多人就会忽略这两种方式的区别,在学习中产生了很多错误,本文将详细区分equals和==两种方式的区别。
“==”解读
对于基本类型和引用类型,==的作用效果是不同的,对于基本类型来说,比较的是值是否相同,对于引用类型来说,比较的是引用是否相同。
代码示例:
publicstaticvoidmain(String[]args){
Stringx="hello";
Stringy="hello";
Stringz=newString("hello");
System.out.println(x.equals(y));//true
System.out.println(x.equals(z));//true
System.out.println(x==y);//true
System.out.println(x==z);//flase
}
因为x,y指向的是同一个引用,所以==和equals都是true,而newString()又开辟了一个新的空间,所以==为false,但是equals始终比较的是值,所以为true。
equals解读
在本质上,equals就是==,只是String和Integer等重写了equals方法,使得equals只用于值比较。
publicclassDemo1{
privateStringname;
publicDemo1(Stringname){
this.name=name;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicstaticvoidmain(String[]args){
Demo1demo1=newDemo1("张三");
Demo1demo2=newDemo1("张三");
Strings=newString("李四");
Strings2=newString("李四");
System.out.println(demo1.equals(demo2));//false
System.out.println(s.equals(s2));//true
}
}
可以看到demo1和demo2的值一样,但是输出结果却是false,而s和s2的值一样却输出结果为true,怎么回事?
equals代码
publicbooleanequals(Objectobj){
return(this==obj);
}
可以看到,原始的equals方法本质上就是==
String类中的equals方法
publicbooleanequals(ObjectanObject){
if(this==anObject){
returntrue;
}
if(anObjectinstanceofString){
StringanotherString=(String)anObject;
intn=value.length;
if(n==anotherString.value.length){
charv1[]=value;
charv2[]=anotherString.value;
inti=0;
while(n--!=0){
if(v1[i]!=v2[i])
returnfalse;
i++;
}
returntrue;
}
}
returnfalse;
}
可以看到,String重写了Object的equals的方法,把引用比较改成了值的比较。
本文主要介绍了java基础开发中“==”与“equals”区别如果想了解更多关于java基础开发相关信息请查看下面的相关链接
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。