equals
方法比较两个对象值是否相等。我的问题是它如何比较两个对象?它如何判断两个对象相等或不相等?我想知道它对两个对象的比较。我不包括 hashCode
方法。
最佳答案
默认实现,java.lang.Object
类之一,仅测试对同一对象的引用:
150 public boolean equals(Object obj) {
151 return (this == obj);
152 }
引用相等运算符在 Java Specification 中是这样描述的:
At run time, the result of == is true if the operand values are both null or both refer to the same object or array; otherwise, the result is false.
这种默认行为通常在语义上不能令人满意。例如,您无法使用 ==
测试大 Integer 实例的相等性:
Integer a = new Integer(1000);
Integer b = new Integer(1000);
System.out.println(a==b); // prints false
这就是该方法被重写的原因:
722 public boolean equals(Object obj) {
723 if (obj instanceof Integer) {
724 return value == ((Integer)obj).intValue();
725 }
726 return false;
727 }
这使得这个:
System.out.println(a.equals(b)); // prints true
覆盖默认行为的类应该根据标识字段(通常是所有字段)的相等性来测试语义相等性。
正如您所知,您应该相应地重写 hashCode
方法。
关于java - Java 中的 equals() 方法是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53736610/