- 语义上:
==
指的是内存引用一样。equals是指的是逻辑相等。逻辑相等具体的意思由编写者决定。 如果要判断内容
是否相同,如果是基本类型,一般用==
,如果是对象,一般用equals。如果要判断对象
是否是同一个,一般用==
,或者自己去重写equals。 - 默认情况下(继承自Object类),equals和
==
是一样的,除非被覆写(override)了。
public boolean equals(Object obj) {
return (this == obj);
}
- 最典型equals已经被override的例子是String; String中的字符串文本相等则视为逻辑相等
(s1.equals(s2)==true)。String
if (this == anObject) {
return true;
}
if (anObject instanceof 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;
}