Rumah >pembangunan bahagian belakang >C++ >Apabila Membandingkan Rentetan: Adakah `string.Equals()` dan `==` Benar-benar Boleh Ditukar?
string.Equals()
dan ==
benar-benar boleh ditukar ganti?
Walaupun kedua-dua pengendali string.Equals()
dan ==
digunakan untuk membandingkan objek untuk kesaksamaan, mereka berkelakuan berbeza.
Sebagai contoh, pembolehubah s
ialah rentetan yang mengandungi "Kategori", dan tvi.Header
ialah tajuk WPF TreeViewItem, yang juga mengandungi "Kategori". Walau bagaimanapun, s == tvi.Header
menilai kepada palsu, manakala s.Equals(tvi.Header)
menilai kepada benar.
Perbezaan ini berpunca daripada dua perbezaan utama:
Equals
ialah polimorfik, yang bermaksud pelaksanaannya bergantung pada jenis masa jalan objek. Dalam kes ini, ia akan menggunakan pelaksanaan rentetan untuk membandingkan nilai dua rentetan. ==
sebaliknya ditaip secara statik dan akan menggunakan pelaksanaan yang sesuai berdasarkan jenis masa kompilasi objek yang dibandingkan (String dan TreeViewItem.Header dalam kes ini). Memandangkan jenis ini berbeza, ==
melakukan perbandingan rujukan dan mengembalikan palsu. Equals
dipanggil pada objek nol, pengecualian NullReferenceException dilemparkan dan ==
jika kedua-dua operan adalah nol, hasilnya adalah benar. Untuk mengelakkan masalah ini, gunakan object.Equals
bukannya Equals
apabila berurusan dengan objek yang berpotensi batal. Untuk meringkaskan, walaupun pengendali string.Equals()
dan ==
kelihatan serupa, terdapat perbezaan dalam jenis dan pengendalian nilai nol. Untuk perbandingan nilai yang tepat, anda harus menggunakan string.Equals()
apabila membandingkan nilai rentetan dan berhati-hati terhadap nilai nol apabila menggunakan operator ==
.
Atas ialah kandungan terperinci Apabila Membandingkan Rentetan: Adakah `string.Equals()` dan `==` Benar-benar Boleh Ditukar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!