equals
==
用于比较值的引用地址是否一致,而 equals
用于比较值的内容是否一致,下面我们来比较一下这两个值是否相同
String x = "Hello";
String y = "Hello";
System.out.println(x.equals(y)); // true
可以发现它的值是相同的
下面我们来对两个对象的值进行比较
public class Main {
public static void main(String[] args) {
A x = new A("John", 20);
A y = new A("John", 20);
System.out.println(x == y); // false
System.out.println(x.equals(y)); // false
}
}
可以发现值的内容确实相同,但比较的结果是 false
其实在 object
中的 equals
底层使用的还是 ==
进行比较的,所以他比较的还是值的引用地址并非值本身
下面是它的底层源码
public boolean equals(Object obj) {
return (this == obj);
}
为什么 String
的 equals
就可以比较值呢?大家可以看看它的底层
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
return (anObject instanceof String aString)
&& (!COMPACT_STRINGS || this.coder == aString.coder)
&& StringLatin1.equals(value, aString.value);
}
可以发现它的底层并非使用 ==
进行比较,而是比较值是否相等。
这也就是为什么 Object
中的 equals
无法比较值的内容是否相等而 String
却可以的原因
那如果非要实现对象的 equals
方法支持比较值的内容是否一致,那么可以在对应的类(A类)中重写这个方法文章来源:https://www.toymoban.com/news/detail-731609.html
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
A a = (A) o;
return age == a.age && Objects.equals(name, a.name);
}
public class Main {
public static void main(String[] args) {
A x = new A("John", 20);
A y = new A("John", 20);
System.out.println(x == y); // false
System.out.println(x.equals(y)); // true
}
}
这样就完美实现了比较两个对象内容是否一致的功能文章来源地址https://www.toymoban.com/news/detail-731609.html
到了这里,关于重写 equals 方法,实现比较两个对象值是否相等的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!