源码中,String类对父类Object的equals()方法进行了重写,理由是object类中的equals()方法,只对两个对象的地址用 == 进行比较,不能满足业务需求。
public class StringEqualTest {
public static void main(String[] args) {
String s1 = "abc";
String s2 = "abj";
System.out.println(equalTest(s1, s2));
}
public static boolean equalTest(Object obj1,Object obj2){
/*1、两个对象的地址,指向相同时直接为true;2、自己跟自己对比时,直接返回true;*/
if (obj1 == obj2){
return true;
}
//当不是String的具体实例对象时,返回false
if(obj1 instanceof String && obj2 instanceof String){
String a = (String) obj1; //向下转型
String b = (String) obj2;
int n = a.length();
if (n == b.length()){ //两个字符串长度不一致,返回false
char[] chara = a.toCharArray();
char[] charb = b.toCharArray();
for (int i = 0;i < n;i++){ //遍历字符数组,挨个进行对比,
if (chara[i] != charb[i]){
return false;
}
}
return true;
}
return false;
}
return false;
}
}