在String、Object中equals的区别
在String、Object中equals的区别
1.String类中的equals方法
//equals: String类重写了Object的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;
}
byte coder() {
return COMPACT_STRINGS ? coder : UTF16;
}
private boolean isLatin1() {
return COMPACT_STRINGS && coder == LATIN1;
}
2.Object类中的equals方法
//equals: Object类equals方法 (底层就是两个对象地址的比较)
public boolean equals(Object obj) {
return (this == obj);
}
3.双等于("==")
对于基础数据类型 比较的是数值大小
对于引用数据类型 比较的是地址
4.小细节
String strA="abc";
String strB=new String ("abc");
//上面两者的实现有所不同
异
strA:存放在堆中的常量池中。
strB:存放在堆中(是new出来的 是一个对象)。
同:
两者最底层都是一个被final修饰的byte[]
private final byte[] value;