== 和 equals的区别

47
0
0
2020-11-27
== 和 equals的区别

==equals的区别

在 Java 中,==equals 是用于比较对象的两种不同方式,它们有以下区别:

  1. 比较的对象类型:

    • == 用于比较两个对象的引用是否相同,即判断两个对象是否是同一个对象的引用。

    • equals 用于比较两个对象的内容是否相等,即判断两个对象是否在逻辑上相等。

  2. 用途:

    • == 通常用于比较基本数据类型和对象引用,判断它们是否指向同一块内存地址。

    • equals 通常被重写用于比较对象的内容,判断它们是否相等,这样可以根据对象的业务逻辑进行判定。

  3. 默认行为:

    • 对于基本数据类型,== 比较的是它们的值。

    • 对于对象引用,== 比较的是对象的内存地址。

    • 对于 equals 方法,默认行为是比较对象的内存地址,即与 == 相同。

  4. 在对象类中的实现:

    • 默认情况下,Object 类中的 equals 方法是直接调用 == 进行对象引用的比较。

    • 一般来说,如果一个类没有重写 equals 方法,那么它继承自 Objectequals 方法将与 == 的行为一致。

  5. 重写 equals 方法:

    • 在自定义类中,通常需要重写 equals 方法,以便根据对象的业务逻辑进行内容比较。

    • 重写 equals 方法时,通常需要满足一些约定,如自反性、对称性、传递性、一致性和非空性等。

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;  // 同一对象引用,内容一定相等
        }
        if (obj == null || getClass() != obj.getClass()) {
            return false;  // 类型不同或比较对象为 null,则不相等
        }
        // 比较对象的内容逻辑
        // ...
    }
    

总结:

  • == 用于比较引用是否相同,即比较对象的内存地址。

  • equals 用于比较内容是否相等,通常需要在自定义类中进行重写。