Rumah > Java > javaTutorial > Hubungan dan penggunaan kaedah equals(Object) dan kaedah hashCode() dalam Java

Hubungan dan penggunaan kaedah equals(Object) dan kaedah hashCode() dalam Java

王林
Lepaskan: 2024-01-11 10:59:02
asal
862 orang telah melayarinya

Hubungan dan penggunaan kaedah equals(Object) dan kaedah hashCode() dalam Java

Kaedah equals(Object) dan kaedah hashCode() dalam Java ialah dua kaedah penting yang digunakan untuk membandingkan kesamaan objek. Terdapat hubungan rapat dan saling bergantung antara mereka, dan mereka memainkan peranan penting dalam pembangunan sebenar.

Pertama, mari analisa peranan kaedah sama (Objek). Kaedah equals(Object) ialah kaedah yang ditakrifkan dalam kelas Object, dan semua kelas Java mewarisi daripada kelas Object. Kaedah equals(Object) digunakan untuk membandingkan sama ada dua objek adalah sama Pelaksanaan lalainya adalah untuk membandingkan alamat memori objek. Jika kaedah equals(Object) tidak ditindih, rujukan objek akan dibandingkan.

Namun, untuk kebanyakan kes, kita perlu membandingkan mengikut kandungan sebenar objek. Sebagai contoh, kami mentakrifkan kelas Orang, yang mengandungi dua atribut: nama dan umur. Kami mahu dua objek Orang dianggap sama apabila nama dan umur mereka adalah sama. Pada masa ini, anda perlu menulis semula kaedah equals(Object) dan menyesuaikan peraturan perbandingan mengikut keperluan.

Apabila mengatasi kaedah equals(Object), anda perlu mengikut prinsip berikut:

  1. Simetri: Jika a.equals(b) mengembalikan benar, maka b.equals(a) juga harus kembali benar.
  2. Refleksitiviti: Untuk sebarang nilai rujukan bukan nol x, x.equals(x) harus kembali benar.
  3. Transitiviti: Jika a.equals(b) mengembalikan benar, dan b.equals(c) mengembalikan true, maka a.equals(c) juga harus mengembalikan true.
  4. Ketekalan: Untuk sebarang nilai rujukan bukan nol x dan y, jika x.equals(y) dipanggil berbilang kali tanpa pengubahsuaian objek, ia sentiasa mengembalikan benar atau sentiasa mengembalikan false, kemudian x.equals( y) akan sentiasa mengembalikan benar atau salah Panggilan ini sentiasa kembali benar atau sentiasa mengembalikan palsu.
  5. equals(null) harus kembali palsu.

Perlu diingatkan bahawa menulis semula kaedah equals(Object) juga memerlukan penulisan semula kaedah hashCode() untuk memastikan ketekalan kaedah hashCode(). Kaedah hashCode() mengembalikan kod cincang objek, yang merupakan nilai jenis int. Kod cincang objek dikira oleh algoritma tertentu daripada nilai atribut objek. Kaedah hashCode() mempunyai banyak kegunaan dalam Java, seperti dalam kelas koleksi untuk meningkatkan kecekapan carian.

Keperluan ketekalan kaedah hashCode() dan keperluan ketekalan kaedah equals(Objek) adalah saling bergantung. Jika dua objek memanggil kaedah equals(Object) dan mengembalikan true, maka kaedah hashCode() mereka mesti mengembalikan nilai yang sama. Dalam erti kata lain, jika dua objek adalah sama, maka kod cincang mereka mestilah sama. Oleh itu, apabila mengatasi kaedah equals(Object), anda juga perlu mengatasi kaedah hashCode().

Mengatasi kaedah hashCode() mengikut prinsip berikut:

  1. Jika kaedah equals(Object) dua objek mengembalikan true, maka kaedah hashCode() mereka mesti mengembalikan nilai yang sama.
  2. Jika kaedah sama(Objek) bagi dua objek mengembalikan palsu, maka kaedah hashCode() mereka tidak semestinya mengembalikan nilai yang berbeza, tetapi mengembalikan nilai yang berbeza boleh meningkatkan prestasi jadual cincang.

Dalam pembangunan sebenar, kami boleh menggunakan alat IDE untuk menjana kod yang ditulis semula secara automatik untuk kaedah equals(Object) dan kaedah hashCode() untuk meningkatkan kecekapan pembangunan. Pada masa yang sama, kami juga boleh menggunakan kelas alat seperti EqualsBuilder dan HashCodeBuilder dalam Apache Commons Lang untuk memudahkan proses penulisan semula.

Ringkasnya, kaedah equals(Object) dan kaedah hashCode() ialah dua kaedah penting untuk perbandingan objek dan pengiraan kod cincang dalam Java. Terdapat hubungan rapat dan saling bergantung antara mereka, dan mereka memainkan peranan penting dalam pembangunan sebenar. Apabila mengatasi kaedah equals(Object), anda perlu mengatasi kaedah hashCode() pada masa yang sama untuk memastikan konsistensi dan prestasi. Dengan memahami dan menggunakan kedua-dua kaedah ini dengan betul, kita boleh melakukan perbandingan objek dan operasi set dengan lebih baik.

Atas ialah kandungan terperinci Hubungan dan penggunaan kaedah equals(Object) dan kaedah hashCode() dalam Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan