==:它的做用是判斷兩個對象的地址是否是相等。即判斷兩個對象是否是同一個對象。(基本數據類型==比較的是值,引用數據類型==比較的是內存地址)java
equals():它的做用也是判斷兩個對象是否相等。但它通常有兩種狀況:code
1.類沒有覆蓋equals方法。則經過equals比較該類的兩個對象時,等價於經過「==」比較這兩個對象。對象
2. 類覆蓋了equals方法,通常咱們都覆蓋equals方法來判斷兩個對象內容相等;若它們的內容相等,則返回true(即,認爲這兩個對象相等)。內存
舉個例子:虛擬機
public class test1 { public static void main(String[] args) { String a = new String("ab"); // a 爲一個引用 String b = new String("ab"); // b爲另外一個引用,對象的內容同樣 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"); } } }
說明:class
1.String中的equals方法 ,是被重寫過的,由於object的equals方法比較的是對象的內存地址,而String的equals方法比較的是對象的值。test
2.當建立String類型的對象時,虛擬機會在常量池中查找有沒有已經存在的值和要建立的值相同的對象,若是有就把它賦值給當前引用。若是沒有就在常量池中建立一個新的String對象。object