一般对象使用equals这个方法用的都是Object类的方法。
具体实现为:
public boolean equals(Object obj) {
return (this == obj);
}
其本质还是比较地址,StringBuilder对象使用的就是Object中的这个方法。所以结果为false
String类中则重写了equals方法。所以结果为true
具体实现为:
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {//判断该对象是否是String类型对象
String aString = (String)anObject;//向下转型
if (coder() == aString.coder()) {
return isLatin1() ? StringLatin1.equals(value, aString.value)
: StringUTF16.equals(value, aString.value);
}
}
return false;
}
总结:==对于基本类型来说是值比较,对于引用类型来说比较的则是地址引用。而 equals默认情况下是引用比较,只是很多类重写了equals方法,例如String,Integer等把它变成了值比较!所以一般情况下equals比较的是值相等,但是前提是必须重写了equals方法! |
|