天天看點

java裡 equals和== 差別

1、java中equals和==的差別 值類型是存儲在記憶體中的堆棧(簡稱棧),而引用類型的變量在棧中僅僅是存儲引用類型變量的位址,而其本身則存儲在堆中。

2、==操作比較的是兩個變量的值是否相等,對于引用型變量表示的是兩個變量在堆中存儲的位址是否相同,即棧中的内容是否相同。

3、equals操作表示的兩個變量是否是對同一個對象的引用,即堆中的内容是否相同。

4、==比較的是2個對象的位址,而equals比較的是2個對象的内容,顯然,當equals為true時,==不一定為true。

如果用A.equals("Hello World"); 要是A為空,就會報空指針exception。
           

******

應用類型之間劃等号

1)指向同一個對象;

2)對其中一個引用的修改,影響另外一個引用;

基本類型之間劃等号

1)指派;

2)對其中一個引用的修改,不會影響另外一個;

null

1)空,沒有指向任何對象;

2)若引用的值為null,則不能再進行任何操作,若對null進行操作則空指針異常;

************

equals方法用于比較兩個對象内容是否相同,若沒有重寫,equals提供的比較方式是使用"==",是以使用該方法,就應該結合需求重寫euqals方法,同樣的 java API中的大部分都重寫了equals;

a和b都是對象,則a==b是比較兩個對象的引用,隻有當a和b指向的時堆中的同一個對象,才會傳回true;而a.equals(b)進行邏輯比較,是以通常要重寫該方法,來提供邏輯一緻性比較。

hashCode()方法,是相應對象整型的hash值,它常用于hash的集合類,如Hashtable,HashMap,linkedhashmap,它與equals方法關系特别緊密,用equals方法來判斷相等,必須具有相同hashcode。