一个例子:
public class A{
public static void main(String[] args){
String str="xx",str2=new String("xx");
if (str.equals(str2))
System.out.println("equals");
else
System.out.println("not equals");
if (str == str2)
System.out.println("==");
else
System.out.println("not ==");
}
}
运行结果如下:
equals
not==
"=="比较的是str与str2是否指向同一个引用,而"equals"比较的则是str与str2是否是相同的值。
在java中,正确使用equals遵循一下几个要素:
1、自反性:对任意x,x.equals(x)一定返回true
2、对称性:对任意x,y,如果x.equals(y)返回true,那么y.equals(x)一定返回true
3、传递性:对任意x,y,z,如果x.equals(y)=true,y.equals(z)=true,那么一定有x.equals(z)=true
4、一致性:对任意x,y,如果对象中用于比较的信息没有改变,那么无论做多少次x.equals(y),返回的值应该一致
5、对任意非null的x,x.equals(null)一定返回false
需要注意的是:
String str=xx;
如果用str=="xx"或者"xx"==str功能相同。
但是如果用str.equals("xx")跟"xx".equals(str)就有很大的区别,因为str.equals("xx")可能导致空指针异常,所以推荐使用"xx".equals(str)进行比较。
如下例子:
public class A{
public static void main(String[] args){
String str=null;if(str.equals("xx"))
System.out.println("equals");
}
}
运行结果:
Exception in thread "main"
java.lang.NullPointerException
at Test.main( Test.java:4 )
at Test.main( Test.java:4 )