转载地址:http://zhidao.baidu.com/link?url=TiUvedxlF4YqktZl8shEigzYnSYA4hrixykEggfs7JbmSbl7bACBcpt2HpRiwA9c9GIv-62b-TAtqVQNkZWFbr9ldGNCYU65LqWgoAIygkm
首先明确的一点,String的equals方法默认是重写了Object类的方法,具体是实现是
public boolean equals(Object paramObject) {
if (this == paramObject) {
return true;
}
if (paramObject instanceof String) {
String str = (String) paramObject;
int i = this.count;
if (i == str.count) {
char[] arrayOfChar1 = this.value;
char[] arrayOfChar2 = str.value;
int j = this.offset;
int k = str.offset;
while (i-- != 0) {
if (arrayOfChar1[(j++)] != arrayOfChar2[(k++)])
return false;
}
return true;
}
}
return false;
}
也就是说,对于a.equals(null)来说,第一步也会判断this == null,这里的this就是a。上面的代码已经说明,当equals传入的参数是null的时候,和a==null的效果是一样的。但是如果传入的参数不是null,那么a==b只能判断a和b是否指向同一个java对象,而a.equals(b)能判断a和b指向的java对象的字符串内容是否一样。