📜  Java中 == 和 .equals() 方法的区别(1)

📅  最后修改于: 2023-12-03 15:01:49.564000             🧑  作者: Mango

Java中 == 和 .equals() 方法的区别

在Java中,==.equals() 两个方法都是用来比较两个对象是否相等。但是它们之间有很大的区别。

==

== 方法比较的是两个对象的内存地址,即它们是否是同一个对象。如果两个对象的内存地址相同,则它们是相等的。

String s1 = "hello";
String s2 = "hello";
String s3 = new String("hello");

System.out.println(s1 == s2); // true,因为s1和s2都指向同一个对象
System.out.println(s1 == s3); // false,因为s1和s3指向不同的对象
.equals()

.equals() 方法比较的是两个对象的内容是否相等,即它们是否具有相同的值。默认情况下,它比较的是两个对象的内存地址,因为所有的Java类都继承自Object类,而Object类中的.equals()方法是比较两个对象的内存地址。

如果需要比较两个对象的内容是否相等,可以在自定义的类中重写.equals()方法。一般情况下,重写.equals()方法时还需要重写.hashCode()方法。

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

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

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

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}

Person p1 = new Person("Tom", 18);
Person p2 = new Person("Tom", 18);

System.out.println(p1.equals(p2)); // true
System.out.println(p1 == p2); // false
总结

.equals() 方法比较的是两个对象的内容是否相等,需要在自定义的类中重写。而== 方法比较的是两个对象的内存地址是否相等。对于Java中的基本数据类型,== 方法和.equals() 方法都比较的是它们的值是否相等。