Rumah  >  Artikel  >  Java  >  kaedah sama di Jawa: Bagaimana untuk membandingkan objek untuk kesamaan?

kaedah sama di Jawa: Bagaimana untuk membandingkan objek untuk kesamaan?

WBOY
WBOYasal
2024-01-11 14:34:22669semak imbas

Java的对象方法:equals(Object) 如何实现对象的相等性比较?

Kaedah objek Java: equals(Object) Bagaimana untuk melaksanakan perbandingan kesamaan objek?

Di Java, kaedah equals(Object) ialah salah satu kaedah utama yang digunakan untuk membandingkan sama ada dua objek adalah sama. Secara lalai, kaedah equals diwarisi daripada kelas Objek dan digunakan untuk membandingkan sama ada rujukan dua objek menghala ke alamat memori yang sama. Walau bagaimanapun, dalam aplikasi, kita selalunya perlu menentukan sama ada objek adalah sama berdasarkan sifatnya, yang memerlukan mengatasi kaedah sama untuk melaksanakan perbandingan kesamaan tersuai.

Untuk mencapai perbandingan kesamaan objek, kita perlu mengikut prinsip berikut:

  1. Simetri: Jika a.equals(b) returns true, b.equals(a) juga harus kembali true.
  2. Refleksitiviti: Untuk mana-mana objek 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: Memanggil a.equals(b) beberapa kali hendaklah sentiasa mengembalikan hasil yang sama, dengan syarat objek yang dibandingkan tidak berubah.
  5. Tidak batal: Untuk mana-mana objek x, x.equals(null) hendaklah mengembalikan palsu.

Untuk melaksanakan perbandingan kesaksamaan tersuai, kita secara amnya perlu mengatasi kaedah equals dan ikuti langkah berikut untuk melaksanakannya:

  1. Mula-mula tentukan sama ada objek masuk ialah contoh kelas semasa, dan jika tidak, kembalikan palsu.
  2. Kemudian parameter masuk dipaksa kepada jenis kelas semasa, dan atribut dibandingkan satu demi satu.
  3. Untuk atribut jenis rujukan, gunakan kaedah equals untuk membandingkan secara rekursif.
  4. Untuk atribut jenis data asas, gunakan operator == untuk perbandingan.
  5. Kembalikan benar jika semua sifat adalah sama, palsu sebaliknya.

Berikut ialah contoh pelaksanaan perbandingan kesamaan objek:

public class Person {
    private String name;
    private int age;
    
    // 构造函数
    
    // 省略getter和setter方法
    
    @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 di atas, kami mengatasi kaedah equals untuk membandingkan objek untuk kesamaan berdasarkan kesamaan nama dan atribut umur. Perlu diingatkan bahawa kami menggunakan kaedah Objects.equals untuk membandingkan atribut nama, yang akan mengendalikan situasi nol dan mengelakkan NullPointerException.

Untuk mengekalkan konsistensi, selalunya perlu mengatasi kaedah Kod cincang supaya objek yang sama mengembalikan kod cincang yang sama. Ini kerana di Jawa, perbandingan kesamaan objek biasanya bergantung pada nilai pulangan kaedah hashCode.

Ringkasnya, mencapai perbandingan kesamaan objek ialah tugas penting dalam pengaturcaraan Java. Dengan mengatasi kaedah equals, kita boleh menentukan sama ada dua objek adalah sama berdasarkan sifat objek, dan mesti mematuhi prinsip perbandingan kesamaan. Apabila mengatasi kaedah equals, kita juga harus mengatasi kaedah hashCode untuk memastikan konsistensi. Dengan melaksanakan perbandingan kesaksamaan dengan betul, kami boleh mengurus objek dengan lebih baik dan menyimpannya dengan betul dalam koleksi sebagai kunci atau nilai apabila diperlukan.

Atas ialah kandungan terperinci kaedah sama di Jawa: Bagaimana untuk membandingkan objek untuk kesamaan?. 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