Java String類的equals原始碼研究
阿新 • • 發佈:2019-01-29
Object類中的equals()方法:
public boolean equals(Object obj)
{
//呼叫equal的物件的地址和引數物件的地址是否相等
return (this == obj);
}
對於Java中的其他類,如果沒有重寫Object類中的equals()方法,我們就可以認為呼叫Object類的equals()方法就是判斷這兩個類是不是同一個類。只要是使用new 類名(),這種形式生成的類(除單例外),我們都可以認為是不同的類(地址不同)。
String類中的equals()方法:
public boolean equals(Object anObject) { //如果是同一個物件 if (this == anObject) { return true; } //如果傳遞進來的引數是String類的例項 if (anObject instanceof String) { String anotherString = (String)anObject; int n = count;//字串長度 if (n == anotherString.count) //如果長度相等就進行比較 { char v1[] = value;//取每一個位置的字元 char v2[] = anotherString.value; int i = offset; int j = anotherString.offset; while (n-- != 0) //對於每一位置逐一比較 { if (v1[i++] != v2[j++]) return false; } return true; } } return false; }
對於Object類的equals()方法,判斷呼叫該方法的物件與要比較的物件是不是同一個物件(判斷地址),而String類中的equals()方法,則判斷當前字串與傳遞進來的字串的內容是否一致。