自学内容网 自学内容网

Java中 ==和equals的区别?

目录

1. == 运算符

用法

对象的比较

基本数据类型的比较

2. equals() 方法

用法

equals() 的重写

3. == 和 equals() 的实际区别

示例:== 和 equals() 的区别

小结:


1. == 运算符

用法
  • == 是 比较运算符,它用于比较两个对象的 引用是否相同,即它们是否指向同一个内存地址。
  • 对于 基本数据类型== 比较的是变量的  是否相等。
对象的比较

对于对象类型(如 StringIntegerList 等),== 比较的是两个对象的内存地址,即它们是否是同一个对象。如果两个对象引用的是同一个内存地址,== 会返回 true;如果它们是不同的对象,== 返回 false

示例:

String str1 = new String("hello");
String str2 = new String("hello");

System.out.println(str1 == str2);  // false,虽然它们的内容相同,但是它们是两个不同的对象,内存地址不同

在上面的代码中:

  • str1 和 str2 是两个不同的 String 对象,即使它们的内容(字符串 "hello")完全相同,它们的内存地址不同,因此 == 运算符返回 false
基本数据类型的比较

对于基本数据类型(如 intfloatchar 等),== 比较的是值。

示例:

int a = 10;
int b = 10;
System.out.println(a == b);  // true,因为它们的值相同

这里,ab 的值都为 10,使用 == 比较时会返回 true,因为它们的值相同。

2. equals() 方法

用法

equals()Object 类的方法,用于 比较两个对象的内容是否相同。每个类可以重写(Override)equals() 方法,定义自定义的对象比较逻辑。特别是像 StringIntegerList 等类,都会重写 equals() 方法,以便按内容比较对象。

  • 默认情况下,在 Object 类中,equals() 方法的实现与 == 相同,比较的是对象的内存地址,即引用是否相同。
  • 但是,大多数类(如 String)都会重写 equals() 方法,比较的是对象的 内容 是否相同。

示例:

String str1 = new String("hello");
String str2 = new String("hello");

System.out.println(str1.equals(str2));  // true,因为 String 类重写了 equals(),比较的是内容

在这个例子中:

  • str1 和 str2 虽然是两个不同的对象(它们的内存地址不同),但它们的内容相同,所以 equals() 返回 true
equals() 的重写

equals() 方法通常会根据对象的内容来判断两个对象是否相等,通常会检查对象的字段值是否相同。这是很多类(如 StringIntegerDate 等)重写 equals() 方法的原因。

自定义类中的 equals() 重写:

如果你有一个自定义的类(比如 Person 类),你通常会重写 equals() 方法来比较对象的内容。

class Person {
    String name;
    int age;

    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;  // 检查类型和空值
        Person person = (Person) obj;
        return age == person.age && name.equals(person.name);  // 比较内容
    }

    public static void main(String[] args) {
        Person p1 = new Person("Alice", 30);
        Person p2 = new Person("Alice", 30);
        Person p3 = new Person("Bob", 25);

        System.out.println(p1.equals(p2));  // true,内容相同
        System.out.println(p1.equals(p3));  // false,内容不同
    }
}

在这个例子中,equals() 方法被重写用来比较 Person 对象的 nameage 字段。如果这两个字段都相同,equals() 返回 true;否则返回 false

3. == 和 equals() 的实际区别

操作符/方法用途比较内容默认行为重写后的行为
==比较引用是否相同基本数据类型:值;对象:引用(内存地址)比较对象的内存地址默认与 equals() 相同,比较内存地址
equals()比较对象内容是否相同比较对象的内容(通常根据类的字段比较)默认比较内存地址根据类的定义比较对象的实际内容
示例:== 和 equals() 的区别
public class TestComparison {
    public static void main(String[] args) {
        // 创建两个不同的 String 对象
        String str1 = new String("hello");
        String str2 = new String("hello");

        // 使用 == 比较
        System.out.println(str1 == str2);  // false,因为它们是不同的对象,内存地址不同

        // 使用 equals() 比较
        System.out.println(str1.equals(str2));  // true,因为它们的内容相同

        // 使用基本数据类型比较
        int a = 100;
        int b = 100;
        System.out.println(a == b);  // true,因为值相同

        // 使用自定义对象比较
        Person p1 = new Person("Alice", 30);
        Person p2 = new Person("Alice", 30);
        System.out.println(p1 == p2);  // false,因为它们是不同的对象,内存地址不同
        System.out.println(p1.equals(p2));  // true,因为它们的内容相同
    }
}

小结:

  • == 比较的是两个引用是否指向同一个对象(即内存地址是否相同)。
  • equals() 比较的是两个对象的 内容 是否相同,通常是通过重写 equals() 方法来根据对象的字段值进行比较。
  • 对于基本数据类型,== 比较的是 ,而不是引用。

原文地址:https://blog.csdn.net/cmh1008611/article/details/143693971

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!