==
对于一个对象来说,==是直接判断该引用指向的对象地址是否相等(是不是同一个对象)。对于基础数据类型就是比较值是否相等
equals
我们看源码
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还是先判断两个引用指向的对象地址是否相等(是否为同一个对象)
假设不是,那么对于String对象,就会利用两个字符数组,遍历,判断两个字符数组的每一个字符是否相等。
因此在只判断String对象值是否相等的时候用equals。判断是否为同一个对象的时候用==