转载: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(nv2[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); } }