• 判断对象是否等价


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

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

  • 相关阅读:
    互斥量
    读写锁
    死锁
    pthread
    线程
    守护进程
    信号捕捉
    信号集
    信号
    mmap
  • 原文地址:https://www.cnblogs.com/lmh15054109/p/14200214.html
Copyright © 2020-2023  润新知