-
1 # dadazhu2
-
2 # 程式設計師小軒
java中的基本資料型別判斷是否相等,直接使用"=="就行了,相等返回true,否則,返回false。
但是java中的引用型別的物件就不同了,假設有兩個引用物件obj1,obj2,obj1==obj2 判斷是obj1,obj2這兩個引用變數是否相等,即它們所指向的物件是否為同一個物件。言外之意就是要求兩個變數所指記憶體地址相等的時候,才能返回true,每個物件都有自己的一塊記憶體,因此必須指向同一個物件才返回ture。
如果想要自定義兩個物件是否相等的規則,那麼必須在物件的類定義中重寫equals()方法,如果不重寫equals()方法的話,預設的比較方式是比較兩個物件是否為同一個物件。在Java API中,有些類重寫了equals()方法,它們的比較規則是:當且僅當該equals方法引數不是 null,兩個變數的型別、內容都相同,則比較結果為true。
重寫equals()方法的步驟一般如下:
1、先用“==”判斷是否相等。
2、判斷equals()方法的引數是否為null,如果為null,則返回false;因為當前物件不可能為null,如果為null,則不能呼叫其equals()方法,否則拋java.lang.NullPointerException異常。
3、當引數不為null,則如果兩個物件的執行時類(透過getClass()獲取)不相等,返回false,否則繼續判斷。
4、判斷類的成員是否對應相等。
-
3 # 程式猿開發日記
首先:同一個物件,指的是多個變數指向的物件是儲存在同一塊記憶體地址中,還是說多個物件他們屬性欄位值是一樣的,但不在同一塊記憶體空間中儲存,這一點需要明確。
其次,基本型別不是物件,所以比較物件是否相同,是不需要考慮基本型別。
最後,如果題主所說的相同,指得是同一個記憶體地址下的值,那麼使用==就可以了判斷是否相同,而如果物件屬性欄位值相等就認定是同一物件的話,那需要重寫hashcode和equals方法,然後再使用==即可。
回覆列表
1.判斷兩個物件是否是同一個引用物件則用==,"=="比的是地址.因為如果地址相同,則就是同一個物件
2.obj1.equals(Object obj2),用來判斷兩個物件是否相等(前面給出的是相等的情況。如果你要不相等的話:!obj1.equals(Object obj2)就可以了