一:在搞明白==和equals之前我們要搞明白一件事情,就是java中內存分類?
java中內存可以簡單的分類為棧內存和堆內存(ps:筆主只是簡單的分類,便於筆主這種入門級程序員理解,如果想細分jvm內存可以查閱相關資料)
棧內存:存放基本數據類型和引用變量,類似這種 int a = 1; String str = "aa";這種你創建的變量只涉及棧內存的空間,不會涉及堆內存。
堆內存:存放對象,類似這種 Person p = new Person(); 這種你創建的對象涉及兩塊內存,棧內存存放person實例的首地址,堆內存存放真正的對象內容
二:然后我們在來看==和equals
==比較棧內存的內容,所以比較基本數據類型和字符串我們都用它
equals比較堆內存存放的內容,因為對象涉及兩塊內存,我們平時項目中都是比較對象的每一個屬性是否相等,如果一樣我們就認為它相等,而equals就是比較堆內存的,所以我們比較對象用equals
三:equals的延伸
筆主看過equals方法的源碼,定義在Object對象中,如下
看到沒有是“==“,也就說jdk帶的equals方法只適合比較基本數據類型和字符串
當我們比較對象的時候必須重寫Object的equals,既然重寫的equals方法,那么hashCode()方法很有必要重寫(具體為什么,我之前看過一個博文說重寫了equals方法就必須重寫hashCode()方法,有興趣的朋友可以研究下,評論給我。)