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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。