深度解析java.lang.String類的equal(Object obj)方法
阿新 • • 發佈:2018-08-18
rst string類型 object ring ava [] div compareto ins
背景:最近在研究靜態掃描的東西,遇到一個規則:"equals(Object obj)" should be overridden along with the "compareTo(T obj)" method
然後就想深度扒一扒equals和compareTo有什麽區別
首先先來看下java.lang.String這個類下面的equals方法是如何實現的。
public boolean equals(Object anObject) { if (this == anObject) { //判斷對象的地址是否一致 return true; } if (anObject instanceof String) { //判斷anObject是否是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; }
1.對象的地址是一致的返回true
2.對象地址不一致但是類型一致,字符數組的長度一致且每個字符都相等,則返回true
3.如果參數不是String類型則返回false
4.如果參數是String類型但是字符數組的長度不一致則返回false
5.如果參數是String類型,字符數組的長度一致,但是從左到右如果遇到字符不一致則返回false
深度解析java.lang.String類的equal(Object obj)方法