判断对象是否等价

关系运算符 == != 适用于所有对象之间的比较运算。

// 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

参考资料:https://lingcoder.github.io/OnJava8/#/sidebar

posted @ 2020-12-28 09:57  Spear_J  阅读(248)  评论(0编辑  收藏  举报