Rumah >Java >javaTutorial >Mengapa Mengatasi Kaedah `equals()` Java yang Salah Membawa kepada Gelagat Tidak Dijangka?

Mengapa Mengatasi Kaedah `equals()` Java yang Salah Membawa kepada Gelagat Tidak Dijangka?

Linda Hamilton
Linda Hamiltonasal
2024-12-16 19:01:15710semak imbas

Why Does Incorrectly Overriding Java's `equals()` Method Lead to Unexpected Behavior?

Mengatasi Kaedah Java equals(): Memahami Keperluan Objek

Di Java, kaedah equals() memainkan peranan penting dalam menentukan kesamaan objek. Seperti yang diterangkan, kaedah equals() telah ditindih untuk membandingkan objek jenis Book. Walau bagaimanapun, isu timbul apabila objek Buku dimulakan dengan hanya ID, yang membawa kepada tingkah laku yang tidak dijangka.

Untuk memahami percanggahan, adalah penting untuk ambil perhatian bahawa Java mentakrifkan kaedah equals() sebagai:

public boolean equals(Object other);

Ini bermakna bahawa parameter kaedah yang ditindih hendaklah daripada jenis Objek. Dalam kod yang disediakan:

public boolean equals(Book b) {
    ... // More code here
}

Kaedah equals() telah terlebih muatan dan bukannya ditindih, kerana ia mempunyai parameter jenis Book dan bukannya Object. Perbezaan ini membawa kepada gelagat yang tidak dijangka kerana ArrayList, yang melakukan perbandingan kesamaan menggunakan kaedah overridden equals(), sebaliknya menggunakan kaedah terlebih beban.

Mengatasi equals() dengan betul memerlukan menggunakan jenis parameter Objek:

@Override
public boolean equals(Object o) {
    Book b = (Book) o;
    ... // The rest goes here   
}

Dengan pengubahsuaian ini, kaedah equals() membandingkan objek Buku dengan betul dengan menukarkan Objek parameter untuk menaip Buku.

Ringkasnya, apabila mengatasi kaedah, adalah penting untuk mematuhi jenis parameter yang dinyatakan dalam tandatangan kaedah kelas super atau antara muka. Kegagalan berbuat demikian boleh membawa kepada tingkah laku atau ralat yang tidak dijangka, menyerlahkan kepentingan menguji dan menyahpepijat kod secara menyeluruh.

Atas ialah kandungan terperinci Mengapa Mengatasi Kaedah `equals()` Java yang Salah Membawa kepada Gelagat Tidak Dijangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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