1. 程式人生 > >String類中的equals方法總結(轉載)

String類中的equals方法總結(轉載)

轉載:https://blog.csdn.net/qq_25827845/article/details/53868815

1.String原始碼中equals大致寫法:

 1 public boolean equals(Object anObject) {
 2 if (this == anObject) {
 3 return true;
 4 }
 5 if (anObject instanceof String) {
 6 String anotherString = (String) anObject;
 7 int n = value.length;
 8 if (n == anotherString.value.length) {
9 char v1[] = value; 10 char v2[] = anotherString.value; 11 int i = 0; 12 while (n-- != 0) { 13 if (v1[i] != v2[i]) 14 return false; 15 i++; 16 } 17 return true; 18 } 19 } 20 return false; 21 }

2. 模仿String equals原始碼

package cn.ywq.test;
 
class MyString {
    
    char[] value;
    public MyString(char
[] value) { this.value=value; //通過構造方法將字元傳入 } public int equalsString(Object obj) { if(this==obj){ return 0; } //若該物件是MyString型別的 if(obj instanceof MyString){ MyString string =(MyString) obj; int n=this
.value.length; if (n>string.value.length) { //先判斷長度的關係 return 1; }else if(n<string.value.length){ return -1; }else{ //若長度相等 char v1[] = this.value; char v2[] = string.value; int i = 0; while (n-- != 0) { //按照陣列的每一位進行比較 if (v1[i] > v2[i]){ return 1; }else if(v1[i] < v2[i]){ return -1; } i++; } return 0; //若while迴圈正常結束,則說明相等,返回0 } } return -100; //若傳入的不是MyString型別的物件 } } package cn.ywq.test; public class Test { public static void main(String[] args) { char[] value={'a','b','c','d'}; // char[] value2={'a','b','c','d','e'}; // char[] value3={'c','b','c','d'}; char[] value4={'a','b','c',}; MyString myString = new MyString(value); MyString s=new MyString(value4); int i = myString.equalsString(s); System.out.println(i); } }