1、如果比较的是常量,则 == 与 equals() 都是比较值知否相当
2、如果是对象间的比较,== 比较对象在堆中的地址,不比较值;equals() 则是先比较地址在比较值,下面是 equals() 的源码
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = value.length;
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}
举例:
public class userTest {
public static void main(String[] args) {
System.out.println("常量间比较:");
String a1 = "aaa";
String b1 = "aaa";
System.out.println(a1==b1);
System.out.println(a1.equals(b1));
System.out.println("对象间比较:");
String a2 = new String("aaa");
String b2 = new String("aaa");
System.out.println(a2==b2);
System.out.println(a2.equals(b2));
}
}
结果:比较结果.PNG
a1、b1 是常量,所有 == 和 equals() 比较他们之间的值,都返回true;
a2、b2 是对象, == 比较对象的在堆中的地址,地址不等所以返回false,equals() 则先比较对象堆中的地址(看上面源码可知),地址不等,再比较对象的值。