==
比较的是两个对象的引用是否相等,用于比较判断是否同一个对象。而equals不一定是这样,equals方法是定义在Object中,其默认实现就是使用==
来比较,如下
public boolean equals(Object obj) {
return (this == obj);
}
但是我们可以重写这个方法实现自己的比较逻辑,就String类型而言,equals比较的是两个字符串的内容是否相等。
String a = "test";
String b = new String("test");
System.out.println(a == b); //false
System.out.println(a.equals(b)); //true
在提问的示例中,变量a和b是指向常量池中的同一个字符串对象“test”,但是在该示例中,字符串a指向的是常量池中的字符串对象,而字符串b指向的是堆中字符串对象,它们不是同一个对象,但是内容相同。在使用equals时,需要需要注意判空,防止出现NullPointerException,一般我们会使用Objects.equals()方法来比较,因为它内部为我们做了判空处理。