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。