दोनों समानता जांचते हैं, लेकिन अर्थ अलग है: रेफरेंस समानता बनाम मान समानता।
रेफरेंस टाइप्स के लिए
==: डिफ़ॉल्ट रूप से **रेफरेंस समानता** (एक ही ऑब्जेक्ट?)।Equals(): **मान समानता** जांचने के लिए ओवरराइड किया जा सकता है।stringदोनों के लिए मान समानता करता है (ऑपरेटर ओवरलोडेड)।
उदाहरण 1: समान रेफरेंस
string str = "hello"; string str2 = str; // समान रेफरेंस Console.WriteLine(str == str2); // True (रेफरेंस) Console.WriteLine(str.Equals(str2)); // True (मान)
उदाहरण 2: अलग ऑब्जेक्ट्स, समान मान
object str = "hello";
char[] values = {'h','e','l','l','o'};
object str2 = new string(values); // अलग ऑब्जेक्ट, समान मान
Console.WriteLine(str == str2); // False (रेफरेंस अलग)
Console.WriteLine(str.Equals(str2)); // True (मान समान)
आउटपुट
उदाहरण 1: True True उदाहरण 2: False True
मूल्य प्रकार (वैल्यू टाइप्स) के लिए
- दोनों **मान समानता** जांचते हैं।
int a = 5, b = 5; a == b→ True,a.Equals(b)→ True।
सर्वोत्तम प्रथाएं
- स्ट्रिंग्स के लिए:
==याEquals()दोनों ठीक (मान समानता)। - कस्टम क्लासेस:
Equals()औरGetHashCode()ओवरराइड करें,==/!=ऑपरेटर ओवरलोड करें। - नल-सेफ जांच:
string.Equals(a, b)(स्टैटिक) याa?.Equals(b) ?? false। ReferenceEquals(a, b)केवल रेफरेंस समानता के लिए।