马士兵java架构师

您现在的位置是:java学习笔记 >

java学习笔记

java中==与equals的区别对比(表格)

2023-11-28 14:10:56java学习笔记 本文浏览次数:1 百度已收录

本 文 目 录

在Java中,==和equals()是用于比较两个对象的运算符和方法,但它们在用法、目的和比较对象类型方面存在一些重要区别。以下是一个表格,总结了这些区别:

1、==和equals()的区别表格

特性 == 运算符 equals() 方法
用途 用于比较基本数据类型和引用类型的相等性 用于比较对象的内容相等性
比较对象类型 可以比较基本数据类型和引用类型 仅用于比较引用类型(对象)
基本数据类型比较 比较值是否相等 不适用,因为基本数据类型不是对象
引用类型比较 比较引用是否指向内存中的同一对象 比较对象的内容是否相等,即对象的属性值是否相等
重写 不能被重写 可以在自定义类中重写,以定义特定的相等性逻辑
默认实现(Object 类) 不适用,因为 == 不是从 Object 类继承的方法 比较对象的引用是否相等,类似于 == 对于引用类型的比较
使用场景 - 比较基本数据类型的值
- 比较引用类型是否指向同一个对象
- 比较对象的内容相等性
- 在集合类(如 HashSet、HashMap)中判断对象是否存在
- 在比较对象属性值时

案例1:使用==比较基本数据类型和引用类型

当然,以下是两个简单的代码案例,说明了==equals()在Java中的用法和区别:

public class Example1 {
    public static void main(String[] args) {
        // 基本数据类型比较
        int a = 5;
        int b = 5;
        System.out.println("a == b: " + (a == b)); // 输出:a == b: true

        // 引用类型比较
        String str1 = new String("hello");
        String str2 = new String("hello");
        System.out.println("str1 == str2: " + (str1 == str2)); // 输出:str1 == str2: false
    }
}

案例2:使用equals()比较对象内容

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 重写equals方法,自定义相等性逻辑
    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true; // 如果是同一个对象,返回true
        if (obj == null || getClass() != obj.getClass()) return false; // 如果对象为空或者类型不一致,返回false
        Person person = (Person) obj; // 强制类型转换为Person类型
        return age == person.age && Objects.equals(name, person.name); // 比较属性是否相等
    }
}

public class Example2 {
    public static void main(String[] args) {
        Person person1 = new Person("Alice", 30);
        Person person2 = new Person("Alice", 30);
        System.out.println("person1.equals(person2): " + person1.equals(person2)); // 输出:person1.equals(person2): true
    }
}

这些代码案例展示了==equals()在Java中的用法和区别。

1、==主要用于比较基本数据类型的值或者判断两个引用是否指向内存中的同一个对象。

2、而equals()主要用于比较对象的内容相等性,即对象的属性值是否相等。

3、在自定义类中,我们通常会重写equals()方法来定义特定的相等性逻辑。