Java知识速记 == 与equals

Java知识速记 == 与equals

1. ==操作符概述

==操作符用于比较基本数据类型的值,或者比较引用类型的对象是否指向同一内存地址。对于基本数据类型,例如int、float等,==会比较其值;但对于对象,==只会比较两个对象的引用,判断它们是否是同一个对象。

示例

int a = 5;
int b = 5;
System.out.println(a == b); // 输出:true

String str1 = new String("Hello");
String str2 = new String("Hello");
System.out.println(str1 == str2); // 输出:false

在这个例子中,虽然str1str2内容相同,但它们是不同的对象,因此==比较返回false

2. equals方法概述

equals()是Java中所有对象的一个方法,定义在Object类中。默认情况下,equals()方法和==操作符的功能相似,比较对象的引用。但可以通过重写equals()方法来自定义对象的相等性比较。这种重写通常用于判断内容的相等性,例如StringInteger等。
示例

String str3 = new String("Hello");
String str4 = new String("Hello");
System.out.println(str3.equals(str4)); // 输出:true

在这个例子中,由于String类重写了equals()方法,所以两个字符串的内容得以比较,返回true

3. 结合具体实例的比较

3.1 比较基本数据类型

对于基本数据类型,==equals()是相同的:

int x = 10;
int y = 10;
System.out.println(x == y); // 输出:true

3.2 比较对象引用

对于对象引用,==只比较内存地址,equals()如果未重写则比较内存地址:

Integer int1 = new Integer(100);
Integer int2 = new Integer(100);
System.out.println(int1 == int2); // 输出:false
System.out.println(int1.equals(int2)); // 输出:true

虽然这两者的值相同,但是因为它们是在堆内存中不同的对象,==返回false,而equals()返回true

3.3 自定义对象的比较

当定义一个自定义类时,重写equals()方法是判断对象相等性的关键:

class Person {
    String name;
    int age;

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

    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null || getClass() != obj.getClass()) return false;
        Person person = (Person) obj;
        return age == person.age && name.equals(person.name);
    }
}

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

在这个自定义Person类的例子中,equals()被重写以比较nameage两个属性,使得即使p1p2是不同的引用,它们在逻辑上依然被认为是相等的。

你可能感兴趣的:(#,Java知识速记,java,jvm,开发语言)