==: 它的作用是判斷兩個對象的地址是不是相等。即判斷兩個對象是不是同一個對象。(對于基本類型,==比較的是值。對于引用數(shù)據(jù)類型,==比較的是內(nèi)存地址)。
equals():它的作用也是判斷兩個對象是否相等。一般有兩種情況:
- 情況1:類沒有覆蓋equals()方法。則通過equals()比較該類的兩個對象時,等價于通過“==”比較這兩個對象。
- 情況2:類覆蓋了equals()方法。一般,我們都覆蓋equals()方法來比較兩個對象的內(nèi)容是否相等;若內(nèi)容相等,則返回ture。
例如:
public class test1 {
public static void main(String[] args) {
String a = new String("ab"); // a 為?個引?
String b = new String("ab"); // b為另?個引?,對象的內(nèi)容?樣
String aa = "ab"; // 放在常量池中
String bb = "ab"; // 從常量池中查找
if (aa == bb) // true
System.out.println("aa==bb");
if (a == b) // false,?同?對象
System.out.println("a==b");
if (a.equals(b)) // true
System.out.println("aEQb");
if (42 == 42.0) { // true
System.out.println("true");
}
}
}
String 中的 equals ?法是被重寫過的,因為 String 的 equals ?法比較的是對象的值。
當(dāng)創(chuàng)建 String 類型的對象時,虛擬機會在常量池中查找有沒有已經(jīng)存在的值和要創(chuàng)建的值相同的對象,如果有就把它賦給當(dāng)前引?。如果沒有就在常量池中重新創(chuàng)建?個 String 對象,所以aa和bb是相同對象的引用。
42和42.0用==比較的是值。