对于初学java的人来说,在面对数值比较的时候,我们大多数会采用“==钡姆绞嚼唇斜冉?但是java中给我们提供了=()方法,这时候很多人就会忽略这两种方式的区别,在学习中产生了很多错误,本文将详细区分=和==两种方式的区别。
"=="解读
对于基本类型和引用类型,==的作用效果是不同的,对于基本类型来说,比较的是值是否相同,对于引用类型来说,比较的是引用是否相同。
代码示例:
公共静态void main (String [] args) { 字符串x=澳愫谩? 字符串y=澳愫谩? 字符串z=新的字符串(“hello”); System.out.println (x.e quals (y));//正确的 System.out.println (x.e quals (z));//正确的 system . out。println (x==y);//正确的 system . out。println (x==z);//误 }
因为x, y指向的是同一个引用,所以==和=都是真实的,而新的字符串()又开辟了一个新的空间,所以==为false,但是=始终比较的是值,所以为真的。
=解读
在本质上,等于就是==,只是字符串和整数等重写了等于方法,使得=只用于值比较。
公开课Demo1 { 私人字符串名称; 公共Demo1(字符串名称){ this.name=名称; } 公共字符串getName () { 返回名称; } 公共空间setName(字符串名称){ this.name=名称; } 公共静态void main (String [] args) { Demo1 Demo1=new Demo1(“张三”); Demo1以及接下来=new Demo1(“张三”); 字符串s=新的字符串(“李四”); 字符串s2=新的字符串(“李四”); System.out.println (demo1.equals(以及接下来));//假的 System.out.println (s.equals (s2));//正确的 } }
可以看到demo1和以及接下来的值一样,但是输出结果却是假的,而年代和s2的值一样却输出结果为真的,怎么回事?
=代码
公共布尔=(对象obj) { 返回(这==obj); }
可以看的到,原始的=方法本质上就是==
字符串类中平等的方法
公共布尔=(对象anObject) { 如果(这==anObject) { 返回true; } 如果(anObject instanceof字符串){ 字符串anotherString=(字符串)anObject; int n=value.length; 如果(n==anotherString.value.length) { v1 char[]=价值; v2 char []=anotherString.value; int i=0; 而(n - !=0) { 如果(v1[我]!=v2[我]) 返回错误; 我+ +; } 返回true; } } 返回错误; }
可以看的到,字符串重写了对象的=的方法,把引用比较改成了值的比较。
本文主要介绍了java基础开发中“==庇搿?鼻鹑绻肓私飧喙赜趈ava基础开发相关信息请查看下面的相关链接