主要是分析在比较对象的时候的情景
为什么要有equals
- Java不支持运算符的重载
- Java方法可以重写
- == 的局限性
== 是什么
== 比较俩个对象的内存引用。如果俩个对象的引用完全相同(指向同一个对象)时,返回true,否则返回false。
但是 == 常用于比较基本数据类型
equals 是什么
equals 方法定义在Object中,可以根据具体的业务逻辑进行重写。
注意重写该方法的时候,有必要重写 hashCode 这个方法。因为 相同的对象必须具有相同的哈希码
用于检查对象的相等性。
默认 Object 的实现
public boolean equals(Object obj) {
return (this == obj);
}
所以默认的 equals 与 == 是一样的
常见的比较 String
首先看一下 String 的 equals 实现
public boolean equals(Object anObject) {
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;
}
测试代码
String a = "a";
String b = "a";
System.out.println(a == b);
System.out.println(a.equals(b));
System.out.println("-------------------");
String c = new String("b");
String d = new String("b");
System.out.println(c == d);
System.out.println(c.equals(d));
System.out.println("-------------------");
String e = new String("a");
System.out.println(a == e);
System.out.println(a.equals(e));
System.out.println("-------------------");
a = c;
System.out.println(a == c);
System.out.println(a.equals(c));
输出
true
true
-------------------
false
true
-------------------
false
true
-------------------
true
true