Rumah  >  Artikel  >  Java  >  Salah faham dan langkah berjaga-jaga biasa: kaedah equals(Object) dalam Java

Salah faham dan langkah berjaga-jaga biasa: kaedah equals(Object) dalam Java

王林
王林asal
2024-01-11 17:25:071121semak imbas

Salah faham dan langkah berjaga-jaga biasa: kaedah equals(Object) dalam Java

Kaedah sama dalam Java ialah kaedah yang digunakan untuk membandingkan sama ada objek adalah sama Ia adalah kaedah kelas Objek dan sangat biasa digunakan dalam pembangunan sebenar. Walau bagaimanapun, disebabkan pemahaman yang tidak mencukupi tentang kaedah equals dan pelaksanaannya, ramai pembangun akan membuat beberapa salah faham biasa apabila menggunakan kaedah equals. Artikel ini akan memperkenalkan langkah berjaga-jaga dan salah faham biasa tentang kaedah equals dalam Java untuk membantu pembaca memahami dan menggunakan kaedah equals dengan lebih baik.

Pertama, mari kita fahami penggunaan asas kaedah equals. Di Java, semua kelas mewarisi daripada kelas Objek, dan kaedah sama dalam kelas Objek ditakrifkan seperti berikut:

public boolean equals(Object obj) {
    return (this == obj);
}

Seperti yang anda lihat, pelaksanaan lalai kaedah sama dalam kelas Objek adalah untuk membandingkan sama ada rujukan bagi objek adalah sama, iaitu, untuk menilai sama ada dua objek adalah sama. Tetapi dalam pembangunan sebenar, kita biasanya perlu menentukan kesamaan berdasarkan kandungan objek, jadi kita perlu mengatasi kaedah sama dalam kelas tersuai. Berikut ialah contoh mengatasi kaedah equals:

public class Person {
    private String name;
    private int age;

    // 省略构造方法和其他代码

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null || getClass() != obj.getClass()) {
            return false;
        }
        Person person = (Person) obj;
        return age == person.age && Objects.equals(name, person.name);
    }
}

Dalam contoh ini, kami mengatasi kaedah equals kelas Orang untuk menentukan sama ada dua objek Orang adalah sama berdasarkan nama dan umur.

Seterusnya, kami akan memperkenalkan beberapa langkah berjaga-jaga dan salah faham biasa tentang kaedah equals yang perlu diberi perhatian dalam pembangunan sebenar.

  1. Anda mesti mengikut spesifikasi semasa mengatasi kaedah equals
    Apabila anda menulis semula kaedah equals, anda perlu mengikut spesifikasi tertentu. Menurut dokumentasi rasmi Java, kaedah equals perlu memenuhi syarat berikut:
  • Refleksitiviti: x.equals(x) mesti kembali benar.
  • Simetri: Jika x.equals(y) kembali benar, maka y.equals(x) mesti kembali true.
  • Transitiviti: Jika x.equals(y) mengembalikan benar, dan y.equals(z) juga mengembalikan true, maka x.equals(z) mesti kembali benar.
  • Ketekalan: Jika x dan y tidak berubah, maka panggilan x.equals(y) beberapa kali akan mengembalikan hasil yang sama.
  • Untuk sebarang rujukan bukan nol x, x.equals(null) mesti mengembalikan palsu.

Apabila menulis semula kaedah equals, anda perlu memastikan syarat di atas dipenuhi untuk memastikan ketepatan kaedah equals.

  1. Jangan lupa untuk mengatasi kaedah hashCode
    Semasa menulis semula kaedah equals, anda juga perlu menulis semula kaedah hashCode. Menurut dokumentasi Java rasmi, jika dua objek dinilai sama mengikut kaedah yang sama, maka nilai kod hash mereka mestilah sama. Oleh itu, apabila menulis semula kaedah equals, pastikan anda menulis semula kaedah hashCode pada masa yang sama untuk memastikan objek boleh dikendalikan dengan betul apabila diletakkan dalam struktur data seperti jadual hash.
  2. Beri perhatian kepada pengendalian pengecualian penuding nol
    Apabila mengatasi kaedah sama, anda perlu memberi perhatian kepada pengendalian pengecualian penuding nol. Apabila menggunakan kaedah sama untuk membandingkan objek, anda perlu terlebih dahulu menentukan sama ada ia adalah batal untuk mengelakkan berlakunya pengecualian penunjuk nol.
  3. Gunakan kaedah sama dengan kelas Objek
    Apabila mengatasi kaedah sama, anda boleh menggunakan kaedah sama dengan kelas Objek untuk membandingkan sama ada sifat objek adalah sama untuk mengelakkan berlakunya pengecualian penuding nol dan pengecualian penukaran jenis. Kaedah sama dengan kelas Objek boleh mengendalikan nilai nol dan penukaran jenis dengan betul, jadi disyorkan untuk menggunakan kaedah sama dengan kelas Objek apabila mengatasi kaedah sama.
  4. Jangan kelirukan kaedah sama dengan ==
    Apabila menggunakan kaedah sama, pastikan untuk membezakan perbezaan antara kaedah sama dengan operator ==. Kaedah equals digunakan untuk membandingkan sama ada kandungan objek adalah sama, dan operator == digunakan untuk membandingkan sama ada rujukan objek adalah sama. Oleh itu, apabila menggunakan kaedah sama, pastikan anda memahami dengan jelas perbezaan antara keduanya.

Untuk meringkaskan, kaedah equals dalam Java ialah kaedah yang digunakan untuk membandingkan sama ada objek adalah sama, dan sangat biasa digunakan dalam pembangunan sebenar. Walau bagaimanapun, apabila menggunakan kaedah equals, anda perlu memberi perhatian kepada spesifikasi dan langkah berjaga-jaga untuk menulis semula kaedah equals untuk mengelakkan salah faham biasa. Menulis semula kaedah equals dengan betul boleh meningkatkan kebolehselenggaraan dan keteguhan program, jadi saya harap artikel ini dapat membantu pembaca lebih memahami dan menggunakan kaedah equals.

Atas ialah kandungan terperinci Salah faham dan langkah berjaga-jaga biasa: kaedah equals(Object) dalam Java. 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