天天看點

==和equals方法究竟有什麼差別

==和equals方法究竟有什麼差別?
  == 操作符專門用來比較兩個變量的值是否相等,也就是用于比較變量所對應的記憶體中所存儲的數值是否相同,要比較兩個基本類型的資料或兩個引用變量是否相等,隻能用==操作符。
  如果一個變量指向的資料是對象類型的,那麼,這時候涉及了兩塊記憶體,對象本身占用一塊記憶體(堆記憶體),變量也占用一塊記憶體,例如Objet obj = new Object();變量obj是一個記憶體,new Object()是另一個記憶體,此時,變量obj所對應的記憶體中存儲的數值就是對象占用的那塊記憶體的首位址。對于指向對象類型的變量,如果要比較兩個變量是否指向同一個對象,即要看這兩個變量所對應的記憶體中的數值是否相等,這時候就需要用==操作符進行比較。
  equals方法是用于比較兩個獨立對象的内容是否相同,就好比去比較兩個人的長相是否相同,它比較的兩個對象是獨立的。例如,對于下面的代碼:
    String a=new String("foo");
    String b=new String("foo");
  兩條new語句建立了兩個對象,然後用a,b這兩個變量分别指向了其中一個對象,這是兩個不同的對象,它們的首位址是不同的,即a和b中存儲的數值是不相同的,是以,表達式a==b将傳回false,而這兩個對象中的内容是相同的,是以,表達式a.equals(b)将傳回true。