判断对象是否等价
关系运算符 ==
和 !=
适用于所有对象之间的比较运算。
// operators/Equivalence.java
public class Equivalence {
public static void main(String[] args) {
Integer n1 = 47;
Integer n2 = 47;
System.out.println(n1 == n2);
System.out.println(n1 != n2);
}
}
输出结果:
true
false
表达式 System.out.println(n1 == n2)
将会输出比较的结果。因为两个 Integer 对象相同,所以先输出 true,再输出 false。但是,尽管对象的内容一样,对象的引用却不一样。
==
和 !=
比较的是对象引用,所以输出实际上应该是先输出 false,再输出 true。
那么怎么比较两个对象的内容是否相同呢?你必须使用所有对象(不包括基本类型)中都存在的 equals()
方法,下面是如何使用 equals()
方法的示例:
// operators/EqualsMethod.java
public class EqualsMethod {
public static void main(String[] args) {
Integer n1 = 47;
Integer n2 = 47;
System.out.println(n1.equals(n2));
}
}
输出结果:
true
上例的结果看起来是我们所期望的。但其实事情并非那么简单。下面我们来创建自己的类:
// operators/EqualsMethod2.java
// 默认的 equals() 方法没有比较内容
class Value {
int i;
}
public class EqualsMethod2 {
public static void main(String[] args) {
Value v1 = new Value();
Value v2 = new Value();
v1.i = v2.i = 100;
System.out.println(v1.equals(v2));
}
}
输出结果:
false
上例的结果再次令人困惑:结果是 false。
原因: equals()
的默认行为是比较对象的引用而非具体内容。
因此,除非你在新类中覆写 equals()
方法,否则我们将获取不到想要的结果。
大多数 Java 库类通过覆写 equals()
方法比较对象的内容而不是其引用。
编写不易,转载注明出处:https://www.cnblogs.com/lmh15054109/p/14200214.html