一、简述String类中的equals方法与Object类中的equals方法的不同点。
String类型的equals比较的是两个字符串内存地址,内存地址是由 hashcode() 方法得出的,所以相同字符串返回为true,并且相同字符串在常量池中只保存一份,在堆上new一个新对象如果是相同的字符串,会引用已有的字符串值.
String类中的equals
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String aString = (String)anObject;
if (coder() == aString.coder()) {
return isLatin1() ? StringLatin1.equals(value, aString.value)
: StringUTF16.equals(value, aString.value);
}
}
return false;
}
object类中的equlas
public boolean equals(Object obj) {
return (this == obj);
}
从源码中看到我们看到object比较的是 Object对象引用的地址值,而String类型的equals比较的两个对象的内容是否相同.