先看一段代碼:
public static void main(String[] args) { String a = new String("abc"); String b = new String("abc"); System.out.println(a==b);//結果為false System.out.println(a.equals(b));//結果為true }
==和equals的區別是什么呢?
簡單的說,“==”用於判斷引用是否相等,equals()用於判斷值是否相等
a和b都是通過new得到的一個對象,是兩個不同的對象,所以其內存地址也是不同的;所以 a==b 返回的結果是false
看一下equals,代碼:
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence {
private final char value[];
private int hash; // Default to 0
public String(String original) {//我們通過new String("abc");把值放入value[]
this.value = original.value;
this.hash = original.hash;
}
/**省略其他的代碼**/
public boolean equals(Object anObject) { if (this == anObject) {//如果兩個值的引用相同,直接返回true return true; } if (anObject instanceof String) {//如果是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; }
/**省略其他的代碼**/
}