==和equals的对比问题,是Java面试官比较喜欢问的问题之一。
那么就来解析一下==和equals:
-
==
==是一个比较运算符
- ==:既可以判断基本类型,又可以判断引用类型。
- ==:如果判断基本类型,判断的是值是否相等。
- ==:如果判断引用类型,判断的是地址是否相等,即判断是否为同一个对象。
-
equals
- equals:是Object类中的方法,只能判断引用类型。
- 默认判断的是地址是否相等,子类中往往重写该方法,用于判断内容是否相等。(比如判断两个字符串是否相等时,用到的equals其实就是String类重写之后的equals。“abc”.equals(“def”)😉
比如看String类重写equals的代码,当然我们自己重写equals参考String类的就行:
public boolean equals(Object anObject) {
//先判断两个对象是不是同一个,如果是同一个,直接返回相等。
if (this == anObject) {
return true;
}
//接着再通过instanceof关键字判断传进去的是否为String类或其子类。
if (anObject instanceof String) {
//接着向下转型,从Object转到String。
String anotherString = (String)anObject;
int n = value.length;
//如果长度相同,按位比较字符大小。
if (n == anotherString.value.length) {
char v1[] = value;
char v2[] = anotherString.value;
int i = 0;
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}