Rumah >Java >javaTutorial >Mengapa Membandingkan Objek Tersuai dengan `==` dan `.equals()` Mengembalikan `false` Walaupun dengan Nilai Medan Sama?

Mengapa Membandingkan Objek Tersuai dengan `==` dan `.equals()` Mengembalikan `false` Walaupun dengan Nilai Medan Sama?

DDD
DDDasal
2024-12-25 03:11:09474semak imbas

Why Does Comparing Custom Objects with `==` and `.equals()` Return `false` Even with Identical Field Values?

Membandingkan Objek dengan .equals() dan == Operator

Soalan:

Dalam kelas tersuai dengan medan rentetan, mengapa perbandingan objek menggunakan kedua-dua operator == dan kaedah .equals() mengembalikan palsu, walaupun apabila nilai medan adalah sama?

Jawapan:

Pengendali == membandingkan rujukan objek, menentukan sama ada objek yang dibandingkan adalah objek yang sama dalam ingatan. Sebaliknya, .equals() membandingkan kandungan objek.

Dalam kes ini, menggunakan == menghasilkan false kerana object1 dan object2 bukan objek yang sama dalam ingatan, walaupun mereka mempunyai medan yang sama nilai. Untuk menentukan sama ada objek adalah sama dari segi nilai medan, .equals() harus digunakan.

Revised equals() Kaedah:

Kaedah equals() dalam kod yang disediakan boleh disemak untuk membandingkan nilai a medan:

public boolean equals(Object object2) {
    if (object2 instanceof MyClass) {
        MyClass otherClass = (MyClass) object2;
        return this.a.equals(otherClass.a);
    }
    return false;
}

Nota Tambahan:

Apabila mengatasi equals(), secara amnya disyorkan untuk turut mengatasi hashCode() untuk mengekalkan kontrak yang mempunyai objek yang sama kod cincang yang sama.

Atas ialah kandungan terperinci Mengapa Membandingkan Objek Tersuai dengan `==` dan `.equals()` Mengembalikan `false` Walaupun dengan Nilai Medan Sama?. 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