在Java中,使用equals和使用==比较对象有什么区别?

在Java中,==可以用来比较对象是否相等,那为什么要需要用equals方法比较呢?它们之间有什么区别,该如何使用?比如比较字符串。

String a = "test";
String b = "test";
System.out.println(== b);          //true
System.out.println(a.equals(b));     //true
javaequals==string
1
223
已修改
小课
小课2022-05-13 15:06
1 个回答

==比较的是两个对象的引用是否相等,用于比较判断是否同一个对象。而equals不一定是这样,equals方法是定义在Object中,其默认实现就是使用==来比较,如下

public boolean equals(Object obj) {
    return (this == obj);
}

但是我们可以重写这个方法实现自己的比较逻辑,就String类型而言,equals比较的是两个字符串的内容是否相等。

String a = "test";
String b = new String("test");
System.out.println(== b);       //false
System.out.println(a.equals(b));  //true

在提问的示例中,变量a和b是指向常量池中的同一个字符串对象“test”,但是在该示例中,字符串a指向的是常量池中的字符串对象,而字符串b指向的是堆中字符串对象,它们不是同一个对象,但是内容相同。在使用equals时,需要需要注意判空,防止出现NullPointerException,一般我们会使用Objects.equals()方法来比较,因为它内部为我们做了判空处理。

1
已修改
小课
小课2022-05-13 15:16
你的回答

内容