在Java編程中,我們經常會使用到兩個運算符:==和equals。這兩個運算符都可以用來比較兩個對象是否相等。但是它們之間有很大的區別。
首先,==運算符比較的是兩個對象的引用地址是否相同。如果兩個對象的引用地址相同,那么它們就是同一個對象;否則就是不同的對象。
String str1 = new String("hello");
String str2 = new String("hello");
System.out.println(str1 == str2);//false
上面的代碼中,str1和str2雖然都是"hello"字符串,但是它們的引用地址不同,所以返回false。
與之相反,equals方法比較的是兩個對象的內容是否相同。如果兩個對象的內容相同,那么它們就是相等的;否則就是不相等的。
String str1 = new String("hello");
String str2 = new String("hello");
System.out.println(str1.equals(str2));//true
上面的代碼中,str1和str2的內容都是"hello"字符串,所以返回true。
需要注意的是,如果沒有重寫equals方法,那么默認使用的是Object類的equals方法,這個方法也是比較的對象的引用地址。
String str1 = new String("hello");
String str2 = new String("hello");
System.out.println(str1.equals(str2));//true
System.out.println(str1.hashCode());//93616297
System.out.println(str2.hashCode());//93616297
上面的代碼中,雖然str1和str2是不同的對象,但是它們的內容相同,所以返回true。同時,因為String類重寫了hashCode方法,所以str1和str2的hashCode值也相同。
綜上所述,==運算符比較的是兩個對象的引用地址,而equals方法比較的是兩個對象的內容。