public boolean equals(Object anObject) {
if (this == anObject) {
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;
}
一、上图是equals的底层代码需要注意的是:
1、判断条件:
这里面有两个判断条件:
一、地址是否向相同:
二、参数是不是由String及其父类创建的对象:
2、得出下面三个结论:
一、比较的两个数据相同时,第一个if被执行,返回true
public class Csdn {
public static void main(String[] args) {
String name="Tom";
String name2="Tom";
name.equals(name2);
}
}
二、比较两个String类型类:
public class Csdn {
public static void main(String[] args) {
String name=new String("Tom");
String name2="Tom";
name.equals(name2);
}
}
此时执行的是第二个if中的,通过value这个全局变量将其转换成数组,先比较调用的对象与比较对象的长度,如果相同在一 一比较 数组中是否相同;
三、新的类:
public class Csdn {
public static void main(String[] args) {
String name=new String("Tom");
Csdn csdn=new Csdn();
name.equals(csdn);
}
}
此时由于输入的为非String对象,所以只需要比较地址是否相同,要是地址不相同就是false