Rumah > pembangunan bahagian belakang > C++ > Perbandingan Rentetan dalam C#: Bilakah `String.Equals()` dan `==` Boleh Ditukar?

Perbandingan Rentetan dalam C#: Bilakah `String.Equals()` dan `==` Boleh Ditukar?

Barbara Streisand
Lepaskan: 2025-01-22 11:31:12
asal
649 orang telah melayarinya

String Comparison in C#: When Are `String.Equals()` and `==` Interchangeable?

Kekeliruan perbandingan rentetan C#: Adakah kaedah String.Equals() dan pengendali == boleh ditukar ganti?

Dalam C#, perbandingan rentetan kadangkala boleh menghasilkan hasil yang tidak dijangka. Soalan biasa ialah sama ada kaedah String.Equals() dan operator kesamaan == berkelakuan sama.

Pertimbangkan coretan kod berikut:

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

Walaupun kedua-dua s dan tvi.Header mengandungi nilai "Kategori" yang sama, pengendali == mengembalikan false dan kaedah String.Equals() mengembalikan true. Ini menimbulkan persoalan: Mengapakah kedua-dua kaedah perbandingan ini menghasilkan keputusan yang berbeza?

Perbezaan Utama antara

String.Equals() dan ==

Terdapat dua perbezaan asas antara pengendali

String.Equals() dan ==:

  1. pelaksanaan jenis khusus: Pengendali == membandingkan berdasarkan jenis masa kompilasi objek, manakala String.Equals() adalah polimorfik, bermakna pelaksanaannya bergantung pada masa jalan jenis objek yang dibandingkan .
  2. Pengendalian nilai nol: Pengendali == tidak akan membuang pengecualian apabila membandingkan rujukan nol, manakala pengendali String.Equals() akan membuang pengecualian NullReferenceException jika mana-mana argumen adalah batal.

Contoh yang menunjukkan perbezaan

Untuk menggambarkan perbezaan ini, pertimbangkan kod berikut:

object x = new StringBuilder("hello").ToString();
object y = new StringBuilder("hello").ToString();

if (x.Equals(y)) // True

if (x == y) // False
Salin selepas log masuk

Walaupun x dan y mempunyai nilai yang sama, pengendali == mengembalikan false kerana ia membandingkan berdasarkan jenis masa kompilasi objek (object), yang berbeza. Untuk mendapatkan perbandingan yang betul, objek mesti dilemparkan secara eksplisit ke jenis yang sesuai (string dalam kes ini).

string xs = (string)x;
string ys = (string)y;

if (xs == ys) // True
Salin selepas log masuk

Kesimpulan

Walaupun pengendali String.Equals() dan == sering digunakan secara bergantian, adalah penting untuk memahami perbezaan halus dalam pelaksanaannya dan pengendalian nilai nol. Untuk memastikan perbandingan rentetan yang boleh dipercayai dan konsisten, biasanya disyorkan untuk menggunakan kaedah String.Equals(), terutamanya apabila membandingkan objek daripada jenis yang berbeza atau apabila berurusan dengan rujukan nol.

Atas ialah kandungan terperinci Perbandingan Rentetan dalam C#: Bilakah `String.Equals()` dan `==` Boleh Ditukar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan