Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

ตรวจสอบว่า String สองออบเจ็กต์มีค่าเท่ากันใน C#

ใน C# string (อ้างอิง System.String) Override Equals และ Operator == ให้เปรียบเทียบ Value Equality (ค่าเนื้อหา) ไม่ใช่ Reference

ตัวอย่างที่ 1: String เท่ากัน

using System;

public class Demo
{
    public static void Main(string[] args)
    {
        string str1 = "John";
        string str2 = "John";

        Console.WriteLine("String 1 = " + str1);
        Console.WriteLine("String 2 = " + str2);
        Console.WriteLine("String 1 เท่ากับ String 2: {0}", str1.Equals(str2));
    }
}

ผลลัพธ์

String 1 = John
String 2 = John
String 1 เท่ากับ String 2: True

ตัวอย่างที่ 2: String ไม่เท่ากัน

using System;

public class Demo
{
    public static void Main(string[] args)
    {
        string str1 = "Tom";
        string str2 = "Kevin";

        Console.WriteLine("String 1 = " + str1);
        Console.WriteLine("String 2 = " + str2);
        Console.WriteLine("String 1 เท่ากับ String 2: {0}", str1.Equals(str2));
    }
}

ผลลัพธ์

String 1 = Tom
String 2 = Kevin
String 1 เท่ากับ String 2: False

วิธีเปรียบเทียบ String ใน C#

วิธีรูปแบบคำอธิบาย
Instance Equalsstr1.Equals(str2)Null-safe (ถ้า str1 ไม่ null)
Static EqualsString.Equals(str1, str2)Null-safe ทั้งคู่ (แนะนำ)
== Operatorstr1 == str2Null-safe อ่านง่าย (แนะนำมากที่สุด)
CompareTostr1.CompareTo(str2) == 0คืน -1, 0, 1 (เรียงลำดับ)
Ordinal (Case-Sensitive)String.Equals(str1, str2, StringComparison.Ordinal)เปรียบเทียบ Binary (เร็วที่สุด)
OrdinalIgnoreCaseString.Equals(str1, str2, StringComparison.OrdinalIgnoreCase)ไม่สนใจ Case
CurrentCultureString.Equals(str1, str2, StringComparison.CurrentCulture)ตามวัฒนธรรมปัจจุบัน (สำหรับ UI)

ตัวอย่างการเปรียบเทียบแบบต่างๆ

string a = "Hello";
string b = "hello";
string c = null;

Console.WriteLine(a == b); // False (Case-Sensitive)
Console.WriteLine(String.Equals(a, b, StringComparison.OrdinalIgnoreCase)); // True
Console.WriteLine(String.Equals(c, "test")); // False (Safe)
Console.WriteLine(c == "test"); // False (Safe)

// String Interning - ค่าคงที่สตริงเดียวกันอาจอ้างอิงออบเจ็กต์เดียวกัน
string s1 = "Hello";
string s2 = "Hel" + "lo"; // Compile-time constant -> Interned
Console.WriteLine(Object.ReferenceEquals(s1, s2)); // True (Same Reference)

string s3 = "Hel";
string s4 = s3 + "lo"; // Runtime -> New Object
Console.WriteLine(Object.ReferenceEquals(s1, s4)); // False (Different Reference)
Console.WriteLine(s1 == s4); // True (Value Equality)

ข้อสังเกตสำคัญ

  • String ใน C# เป็น Immutable Reference Type แต่พฤติกรรม Equals/== เป็น Value Comparison
  • ใช้ == หรือ String.Equals สำหรับการเปรียบเทียบทั่วไป (อ่านง่าย Null-Safe)
  • ระบุ StringComparison เสมอสำหรับการเปรียบเทียบที่ชัดเจน (Ordinal vs Culture)
  • StringComparison.Ordinal เร็วที่สุด เหมาะสำหรับ Key, ID, Code Comparison
  • StringComparison.OrdinalIgnoreCase เหมาะสำหรับ User Input, Case-Insensitive Match