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
Lepaskan: 2024-12-25 03:11:09
asal
464 orang telah melayarinya

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;
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan