Katakanlah saya memiliki kelas saya sendiri
public class MyObj { /* ... */ }
Ini memiliki beberapa atribut dan metode. Ini TIDAK mengimplementasikan sama, JANGAN mengimplementasikan kode hash.
Setelah kita memanggil sama dengan dan kode hash, apa implementasi defaultnya? Dari kelas Object? Dan apakah itu? Bagaimana cara kerja default sama? Bagaimana hashCode default akan bekerja dan apa yang akan dikembalikan? == hanya akan memeriksa apakah mereka merujuk ke objek yang sama, jadi itu mudah, tetapi bagaimana dengan metode equals () dan hashCode ()?
v6u23 ea
:public native int hashCode();
Ada implementasi default dari
equals()
danhashCode()
di Object. Jika Anda tidak menyediakan implementasi Anda sendiri, itu akan digunakan. Sebabequals()
, ini berarti==
perbandingan: objek hanya akan sama jika mereka adalah objek yang persis sama. SebabhashCode()
, Javadoc punya penjelasan yang bagus.Untuk informasi lebih lanjut, lihat Efektif Java, Bab 3 (pdf), item 8.
sumber
Ya, dari
Object
kelas karena kelas Anda memperluas Object secara implisit.equals
hanya kembalithis == obj
.hashCode
implementasi asli. Hanya tebakan - ini mengembalikan penunjuk ke objek.sumber
Jika Anda tidak menyediakan implementasi Anda sendiri, implementasi yang berasal dari Object akan digunakan. Tidak apa-apa, kecuali jika Anda berencana untuk memasukkan instance kelas Anda ke, yaitu HashSet (koleksi apa pun yang benar-benar menggunakan hashCode ()), atau sesuatu yang perlu memeriksa persamaan objek (yaitu metode berisi () HashSet). Jika tidak, itu akan bekerja secara tidak benar, jika itu yang Anda minta.
Sangat mudah untuk menyediakan implementasi Anda sendiri untuk metode ini berkat HashCodeBuilder dan EqualsBuilder dari Apache Commons Lang .
sumber
Foo
danBar
adalah referensi ke dua contoh berbeda dari tipe yang bisa berubah, dan ada metode (misalnyaSomeMutatingMethod
) yangFoo.SomeMutatingMethod()
tidak mempengaruhiBar
cara yang samaFoo
, perbedaan itu harus cukup untuk menganggap objek sebagai tidak sama.Karya pengembang IBM mengatakan:
Namun, untuk memastikan detail implementasi yang tepat untuk versi Java vendor tertentu, sebaiknya lihat sebagai sumber (jika tersedia)
sumber