Perbandingan rentetan: Perbezaan antara kaedah string.Equals()
dan operator ==
Dalam pengaturcaraan, orang sering berfikir bahawa kaedah string.Equals()
dan operator ==
boleh digunakan secara bergantian dalam perbandingan rentetan. Walau bagaimanapun, satu teka-teki menarik timbul yang mencabar tanggapan yang diprasangka ini.
Analisis Masalah
Pertimbangkan kod berikut:
<code class="language-csharp">string s = "Category"; TreeViewItem tvi = new TreeViewItem(); tvi.Header = "Category"; Console.WriteLine(s == tvi.Header); // false Console.WriteLine(s.Equals(tvi.Header)); // true Console.WriteLine(s == tvi.Header.ToString()); // true</code>
Tanpa diduga, pengendali ==
mengembalikan false
pada perbandingan pertama, menunjukkan bahawa s
dan tvi.Header
tidak dianggap sama. Sebaliknya, kaedah Equals()
mengembalikan true
, menunjukkan kesaksamaan.
Perbezaan Utama
Perbezaan hasil terhasil daripada dua perbezaan ketara antara dua mekanisme perbandingan:
Equals()
adalah polimorfik, ia memerlukan pelaksanaan kelas objek sasaran. Pengendali ==
, sebaliknya, bergantung pada maklumat jenis masa kompilasi. Contohnya, jika s
diisytiharkan sebagai StringBuilder
dan kemudian ditukar kepada rentetan, ==
masih akan membandingkannya dengan tvi.Header
sebagai objek StringBuilder
. Equals()
pada objek null akan menghasilkan NullReferenceException
, manakala pengendali ==
hanya akan mengembalikan false
. Untuk mengelakkan masalah ini, gunakan kaedah object.Equals()
walaupun salah satu objek kosong. Kesimpulan
Walaupun pengendali string.Equals()
dan ==
secara amnya boleh menghasilkan hasil yang serupa, mereka adalah mekanisme perbandingan yang berbeza dengan kelebihan dan had yang unik. Memahami perbezaan ini adalah penting untuk menulis kod teguh yang mengendalikan perbandingan rentetan dengan betul.
Atas ialah kandungan terperinci Adakah `string.Equals()` dan `==` Operator Sentiasa Setara untuk Perbandingan Rentetan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!