Rumah  >  Artikel  >  Java  >  Bagaimana untuk membandingkan objek dengan betul untuk kesamaan di Jawa: mengatasi dan mengatasi kaedah equals(Object)

Bagaimana untuk membandingkan objek dengan betul untuk kesamaan di Jawa: mengatasi dan mengatasi kaedah equals(Object)

WBOY
WBOYasal
2024-01-11 17:18:05513semak imbas

Bagaimana untuk membandingkan objek dengan betul untuk kesamaan di Jawa: mengatasi dan mengatasi kaedah equals(Object)

Kaedah equals(Object) dalam Java ialah kaedah yang digunakan untuk membandingkan kesamaan dua objek. Dalam kelas Java, kaedah equals diwarisi daripada kelas Object secara lalai, dan ia hanya membandingkan nilai rujukan dua objek. Walau bagaimanapun, kita sering perlu membandingkan objek untuk kesaksamaan dengan cara tersuai, yang memerlukan mengatasi kaedah yang sama dalam subkelas.

Untuk membandingkan objek dengan betul untuk kesamaan, kita mesti mengikut beberapa peraturan. Pertama, kaedah equals mesti memenuhi reflekstiviti, yang bermaksud bahawa objek mesti sama dengan dirinya sendiri. Kedua, kaedah sama mesti memenuhi simetri, iaitu, jika objek A sama dengan objek B, maka objek B dan objek A juga mesti sama. Akhir sekali, kaedah equals mesti memenuhi transitivity, iaitu, jika objek A adalah sama dengan objek B, dan objek B adalah sama dengan objek C, maka objek A dan objek C juga mesti sama.

Untuk mengatasi dan mengatasi kaedah sama, kita perlu mempertimbangkan perkara utama berikut.

Pertama, kita perlu memastikan bahawa tandatangan kaedah sama adalah konsisten dengan kaedah sama dalam kelas Objek. Tandatangan kaedah equals hendaklah: public boolean equals(Object obj). Ini bermakna kita perlu menerima parameter jenis Objek dan mengembalikan nilai Boolean.

Kedua, kita perlu melakukan semakan jenis untuk memastikan bahawa parameter yang dihantar adalah objek yang sepadan dengan jenis objek semasa. Ini boleh dicapai dengan menggunakan kata kunci instanceof. Jika semakan jenis gagal, kami boleh terus mengembalikan palsu.

Kemudian, kita perlu menukar parameter masuk kepada jenis objek semasa dan membandingkan kesamaan pelbagai sifat. Dalam proses ini, kita mesti mengikut konvensyen pelaksanaan kaedah equals Java, iaitu, menggunakan kaedah equals untuk membandingkan sifat objek dan bukannya menggunakan operator "==".

Apabila membandingkan nilai atribut, kita perlu mempertimbangkan kes rujukan nol. Jika nilai harta adalah nol, kita boleh menggunakan kaedah sama dengan kelas Objek untuk perbandingan, yang akan mengendalikan situasi rujukan nol dengan betul. Selain itu, untuk atribut jenis asas, kita boleh terus menggunakan operator "=" untuk perbandingan.

Akhir sekali, kita perlu memastikan bahawa kaedah yang sama mengatasi kaedah hashCode. Menurut spesifikasi Java, jika dua objek adalah sama, kaedah hashCode mereka mesti mengembalikan nilai yang sama. Ini adalah untuk memastikan objek disimpan dan diambil dengan betul apabila menggunakan struktur data seperti jadual cincang.

Berikut ialah contoh yang menunjukkan cara untuk mengatasi kaedah equals:

public class Person {
    private String name;
    private int age;
  
    // 省略构造方法、getter和setter方法
  
    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (!(obj instanceof Person)) {
            return false;
        }
        Person other = (Person) obj;
        return Objects.equals(this.name, other.name) && this.age == other.age;
    }
  
    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
  
    // 省略其他方法
}

Dalam contoh di atas, kami telah mengatasi kaedah equals untuk membandingkan nama dan sifat umur objek Person untuk kesamaan. Pada masa yang sama, kami juga mengatasi kaedah hashCode untuk memastikan objek yang sama mempunyai kod cincang yang sama.

Untuk meringkaskan, dengan menulis semula dan mengatasi kaedah equals dengan betul, kami boleh memastikan bahawa kami mendapat hasil yang betul apabila membandingkan objek untuk kesamaan. Perlu diingatkan bahawa penulisan semula kaedah equals mesti memenuhi sifat seperti reflekstiviti, simetri, dan transitivity, dan kaedah hashCode juga perlu ditulis semula. Dengan mengikuti peraturan ini, kami boleh memastikan bahawa kami mendapat hasil yang betul apabila menggunakan perbandingan kesamaan objek.

Atas ialah kandungan terperinci Bagaimana untuk membandingkan objek dengan betul untuk kesamaan di Jawa: mengatasi dan mengatasi kaedah equals(Object). 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