每週讀源碼:String類的equals是怎麼實現的(阿里面試手寫代碼)

大家好,這裡是IT技術百貨,專注於有價值的IT技術知識分享;

今天跟大家分享Java String類的equals方法的實現

關於equals方法,需要明白的知識點

equals一般是用來比較兩個對象是否相等,當然每個對象和其自身肯定是相等的;

經常在面試中被問到的一個知識點是equals和==的區別,一般都知道,==比較的是對象的地址,而equals比較對象是否相等,相等定義可以由開發者自己去定義和實現;

java Object類定義類equals的實現,這裡實現的邏輯是比較兩個對象的地址,地址相同則認為相等,地址不同則認為不等。

我們在平時開發中會遇見需要重寫對象的equals方法的情況,但實現往往存在不合理、不科學、不優雅的問題,所以今天來看看String的Equals實現方式是怎樣的,其他對象的Equals邏輯完全可以套用這個結構。

Equals源碼解讀

詳見代碼註釋;

<code>public boolean equals(Object anObject) {//注意:equals的入參是Object對象
if (this == anObject) {//首先比較是否是同一個對象,同一個對象自然相等,直接返回true;
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;
}/<code>

小結

equals方法的整體結構:

  1. 比較是否和自身相等
  2. 比較兩個對象類型是否相等
  3. 具體的比較邏輯,一旦不滿足某一個條件則直接返回

感謝瀏覽閱讀,如果覺得內容有價值歡迎點贊,轉發;喜歡請關注“IT技術百貨”


分享到:


相關文章: