Rumah >pembangunan bahagian belakang >C++ >String.Equals() vs. == dalam C#: Adakah Mereka Benar-benar Setara?
Perbandingan rentetan C#: perbezaan antara string.Equals()
dan ==
Dalam C#, kaedah string.Equals()
dan pengendali ==
kelihatan sangat serupa, tetapi terdapat perbezaan halus antara keduanya yang boleh membawa kepada hasil yang tidak dijangka.
Jenis polimorfisme dan masa jalan
Perbezaan utama ialah polimorfisme. Equals()
ialah kaedah polimorfik, yang bermaksud pelaksanaannya boleh ditindih berdasarkan jenis masa jalan objek sasaran. Sebaliknya, pelaksanaan ==
ditentukan semata-mata oleh jenis masa penyusunan operan. Perbezaan ini menjadi jelas apabila membandingkan objek daripada jenis yang berbeza, kerana Equals()
pelaksanaan kelas objek sasaran akan dipanggil dan ==
akan melakukan perbandingan rujukan berdasarkan jenis masa kompilasi.
Nilai nol dan pengecualian
Perbezaan lain ialah cara nilai nol dikendalikan. Jika Equals()
dipanggil pada objek nol, ia akan membuang NullReferenceException
pengecualian, manakala ==
hanya akan mengembalikan false
. Ini boleh menjadi masalah apabila membandingkan objek yang mungkin nol. Untuk mengelakkan masalah ini, anda boleh menggunakan kaedah object.Equals()
, yang menyemak nilai nol sebelum memanggil Equals()
.
Contoh
Pertimbangkan kod berikut:
<code class="language-csharp">object x = new StringBuilder("hello").ToString(); object y = new StringBuilder("hello").ToString(); // Equals() 将比较值,考虑运行时类型 if (x.Equals(y)) // True // == 将执行引用比较,而不管运行时类型 if (x == y) // False</code>
Dalam contoh ini, x
membandingkan nilai y
dan Equals()
dengan betul walaupun x
dan y
ialah jenis objek yang berbeza. Walau bagaimanapun, ==
melakukan perbandingan rujukan dan mengembalikan false
kerana ia bukan tika objek rentetan yang sama.
Kesimpulan
Walaupun Equals()
dan ==
kelihatan serupa, tingkah laku mereka berbeza dalam cara utama. Memahami perbezaan ini adalah penting untuk mengelakkan perbandingan rentetan yang tidak dijangka dan memastikan pemeriksaan kesamaan objek yang betul.
Atas ialah kandungan terperinci String.Equals() vs. == dalam C#: Adakah Mereka Benar-benar Setara?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!