前言
今天学习到Object类时,看到了Object.equals
方法是用于检查两个对象的引用是否相等,然后立马想到了这与String.equals
相反,所以去看了一下源码。
对比
首先进Object.equals
的源码瞄了一眼,发现确实是用于检查两个对象的引用是否相等,直接使用了==
实现。
public boolean equals(Object var1) {
return this == var1;
}
然后打开了String.qeuals
源码:
public boolean equals(Object var1) {
if (this == var1) {
return true;
} else {
if (var1 instanceof String) {
String var2 = (String)var1;
int var3 = this.value.length;
if (var3 == var2.value.length) {
char[] var4 = this.value;
char[] var5 = var2.value;
for(int var6 = 0; var3-- != 0; ++var6) {
if (var4[var6] != var5[var6]) {
return false;
}
}
return true;
}
}
return false;
}
}
发现确实是重写了equals
,首先判断是否为同一个对象,如果是,直接返回真。如果不是,就接着看字面量是否相等,由于传入的时Object
对象,所以先用instanceof
判断了一下,然后转换为char[]
,直接用循环逐元素检查。
后记
毫无技术含量,就是学习中一次感悟,很想记录下来,万一有人也有类似的问题,那这篇文章也算有所贡献了。