==:判断的是两个对象的地址是否相等(等同于判断两个对象是否是同一个对象)。
基本数据类型比较的是值是否相等;引用数据类型比较的是内存地址是否相等。
equals():也是判断两个对象是否相等
有两种使用情况需要区分
1)类没有重写equals()方法。通过 equals() 比较类的两个对象时,比较的是两个对象的引用地址是否相同,等同于==。
2)类重写了equals()方法。一般我们会重写equals()方法来判断两个对象的内容相等。如果内容相等则认为两个对象相等。
比如
public class Main {
public static void main(String[] args) {
/**
* false true
*/
String str1 = "hello";
String str2 = "he" + new String("llo");
System.out.println("str1==str2="+(str1==str2)); //false 内存地址的比较
System.out.println("str1.equals(str2)="+(str1.equals(str2)));//true 内容的比较
}
}
备注:
String类中的equals()是被重写过的。Object类中的equals()方法是比较两个对象的引用地址是否相等,而String类里重写了equals()方法,是判断的对象内容是否相等。
当创建String对象时,JVM会在常量池中查找是否已经有存在的值跟要创建的值相同的对象,如果有则直接赋值给当前引用,如果没有则创建新的String对象。