因为两者都来自不同的班级.a来自String班级,b来自Integer班级.因此,它将返回false而不进一步检查实例的内容.
尽管如此,您已经使用Object引用声明了这两个实例,但是,在运行时,当您调用.equals()方法时,它们将委派给它们实际的实例类.
例如,如果你采用String类equals()方法,它就像
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
if (anObject instanceof String) {
String anotherString = (String)anObject;
int n = count;
if (n == anotherString.count) {
char v1[] = value;
char v2[] = anotherString.value;
int i = offset;
int j = anotherString.offset;
while (n-- != 0) {
if (v1[i++] != v2[j++])
return false;
}
return true;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
因此,如果您传递了另一个类的实例,它将返回false.
您a是一个Object容器,包含一个String对象,而您b是一个Object容器,包含一个Integer对象.
当你打电话equals()时a,它确实String.equals()发现你的String刚好不等于一个Integer而且没有任何数量的自动装箱和开箱即可.
| 归档时间: |
|
| 查看次数: |
178 次 |
| 最近记录: |