equals 和 == 区别,你的回答能让面试官满意么?
equals 和 == 在面试中经常能遇到,一般的回答都是:== 是比较值,equals是比较内容之类,只是说对了很小的一部分。
那么我们来看看这两个到底有什么区别吧。
equals其实的父类的一个方法,父类是这样定义它的:
public boolean equals(Object obj) {
return (this == obj);
}
看着和== 很相似把,没错!父类中的equals就是在比较引用所指的那块内存中的值(如果指向对象,这是地址)。
那?为什么我们经常碰到的equals都是在比较内容?
重写equals,String类继承Object类,并且重写了父类的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;
}
从上面代码可以看出最先是比较==,如果引用相等,直接就是true。然后再去比较这个对象是不是String对象的一个实例,是,则继续往下执行。
然后再把这两个字符串,拆成字符,一个一个的去比较。这样就可以比较内容了。
所以,当有人问到这两个到底有什么区别时,看代码就知道了。
#Java工程师#
阿里云工作强度 585人发布
查看9道真题和解析