Rumah >Java >javaTutorial >Bagaimana untuk Mengatasi Kaedah equals() dengan betul dalam Java untuk Perbandingan Objek Tersuai?

Bagaimana untuk Mengatasi Kaedah equals() dengan betul dalam Java untuk Perbandingan Objek Tersuai?

Barbara Streisand
Barbara Streisandasal
2024-12-27 08:16:09377semak imbas

How to Properly Override the equals() Method in Java for Custom Object Comparisons?

Mengatasi Kaedah Equals dalam Java

Di Java, kaedah equals bertanggungjawab untuk menentukan sama ada dua objek adalah sama. Secara lalai, kaedah equals membandingkan rujukan objek, yang bukan tingkah laku yang diingini untuk banyak kelas tersuai. Untuk mengatasi kaedah equals dan mentakrifkan semantik kesaksamaan tersuai, garis panduan berikut harus dipatuhi:

  • Semak nol: Kaedah harus terlebih dahulu menyemak sama ada objek yang diluluskan adalah batal dan kembalikan palsu jika ia.
  • Semak jenis: Sahkan bahawa objek yang diluluskan adalah daripada jenis yang sama sebagai objek panggilan. Jika tidak, kembalikan palsu.
  • Bandingkan medan: Tentukan medan berkaitan yang mentakrifkan kesamaan dan bandingkan nilainya.
  • Gunakan keutamaan operator: Gunakan keutamaan pengendali untuk memastikan bahawa potensi nilai nol disemak sebelum nilai tersebut diakses.

Penyelesaian:

Kod yang disediakan cuba membandingkan medan Integer (umur) menggunakan kaedah sama, yang bertujuan untuk Strings sahaja. Untuk membetulkannya, semakan kesaksamaan untuk medan umur hendaklah digantikan dengan perbandingan menggunakan operator ==:

...
} else {
    People otherPeople = (People) other;
    result = name.equals(other.name) && other.age == age;
}
...

Penggunaan:

Kod berikut menunjukkan cara menggunakan kaedah sama yang diganti:

...
// Add several Person objects to an ArrayList
people.add(new Person("Subash Adhikari", 28));
people.add(new Person("K", 28));
people.add(new Person("StackOverflow", 4));
people.add(new Person("Subash Adhikari", 28));

// Compare each pair of Person objects using the overridden equals method
for (int i = 0; i < people.size() - 1; i++) {
    for (int y = i + 1; y <= people.size() - 1; y++) {
        boolean check = people.get(i).equals(people.get(y));
        System.out.println("-- " + people.get(i).getName() + " - VS - " + people.get(y).getName());
        System.out.println(check);
    }
}
...

Kod ini akan menghasilkan yang berikut output:

-- Subash Adhikari - VS - K false
-- Subash Adhikari - VS - StackOverflow false
-- Subash Adhikari - VS - Subash Adhikari true
-- K - VS - StackOverflow false
-- K - VS - Subash Adhikari false
-- StackOverflow - VS - Subash Adhikari false

Output ini menunjukkan bahawa kaedah overridden equals sedang membandingkan objek Person dengan betul berdasarkan nama dan medan umurnya.

Atas ialah kandungan terperinci Bagaimana untuk Mengatasi Kaedah equals() dengan betul dalam Java untuk Perbandingan Objek Tersuai?. 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