从实操中学Java:==和equals的区别
在Java中,我们常常遇到判断两个数据是否相等的应用场景。这是我们可以使用==和equals进行判断。所以我们需要弄清这二者之间的区别
废话不多说,先上代码进行研究:
String x = "str";
String y = "str";
String z = new String("str");
System.out.println(x==y);
System.out.println(x==z);
System.out.println(x.equals(y));
System.out.println(x.equals(z));
不知和看官老爷预想的结果是否一致?那么我们来讨论以下为什么是这种结果。
首先我们需要知道,==和equals比较是什么?
(1)==
基本数据类型:比较的是值是否相等;
引用数据类型:比较的是引用是否相等;
那么对于
System.out.println(x==y);
和
System.out.println(x==z);
x和y都指向同一个引用,因此System.out.println(x==y);
结果为true
z则是通过new String()开辟了新的内存空间,因此引用不相等,所以值为false。
(2)equals
equals在本质上就是==,但是String域Integer等重写了equals方法,在比较时变成了值得比较
所以
System.out.println(x.equals(y));
System.out.println(x.equals(z));
在比较时值比较值是否相等,因此,二者得结果都为true。