1蚤认、如果比較的是常量队魏,則 == 與 equals() 都是比較值知否相當(dāng)
2、如果是對(duì)象間的比較臼疫,== 比較對(duì)象在堆中的地址线召,不比較值;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("對(duì)象間比較:");
String a2 = new String("aaa");
String b2 = new String("aaa");
System.out.println(a2==b2);
System.out.println(a2.equals(b2));
}
}
結(jié)果:a1缓淹、b1 是常量,所有 == 和 equals() 比較他們之間的值塔逃,都返回true讯壶;
a2、b2 是對(duì)象湾盗, == 比較對(duì)象的在堆中的地址伏蚊,地址不等所以返回false,equals() 則先比較對(duì)象堆中的地址(看上面源碼可知)格粪,地址不等躏吊,再比較對(duì)象的值。