java中創(chuàng)建對象的幾種方式 在java的集合中是怎么判斷兩個對象是否相等的?
在java的集合中是怎么判斷兩個對象是否相等的?首先判斷兩個對象的hashcode()是否相等,然后判斷equals()是否相等。如果兩個對象相等,則它們相等。PS:兩個對象是否相等的最終決定是equ
在java的集合中是怎么判斷兩個對象是否相等的?
首先判斷兩個對象的hashcode()是否相等,然后判斷equals()是否相等。如果兩個對象相等,則它們相等。PS:兩個對象是否相等的最終決定是equals()。hashcode()的存在只是比較的效率。如果沒有hashcode(),比較會很慢。Equals()是唯一的判斷標(biāo)準(zhǔn),hashcode()更快
Java中的基本數(shù)據(jù)類型用來判斷兩個對象是否相等。直接使用“==”。如果它們相等,則返回true;否則返回false。
但是Java中引用類型的對象是不同的。假設(shè)有兩個參照對象obb1,obb2,obb1==obb2,判斷兩個參照變量obb1和obb2是否相等,即它們所指向的對象是否是同一個對象。這意味著只有當(dāng)兩個變量的內(nèi)存地址相等時,才能返回true。每個對象都有自己的內(nèi)存,因此它必須指向同一個對象才能返回true。
如果要自定義兩個對象是否相等的規(guī)則,必須重寫對象的類定義中的equals()方法。如果不重寫equals()方法,則默認(rèn)比較方法是比較兩個對象是否為同一對象。在javaapi中,有些類重寫equals()方法。它們的比較規(guī)則是:當(dāng)且僅當(dāng)equals方法參數(shù)不為null且兩個變量的類型和內(nèi)容相同時,比較結(jié)果為真。
重寫equals()方法的步驟通常如下:
1。先用“==”判斷是否相等。
2. 判斷equals()方法的參數(shù)是否為空。如果為空,則返回false。因為當(dāng)前對象不能為null,如果為null,則不能調(diào)用其equals()方法,否則將被拒絕java.lang.NullPointerException異常不正常。
3. 如果參數(shù)不為null,則如果兩個對象的運行時類(通過getclass()獲得)不相等,則返回false。否則,繼續(xù)判斷。
4. 確定班級成員是否平等。