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工程师#