Middle
Jaký je rozdíl mezi metodou Equals a operátorem == v C#?
sobes.tech AI
Odpověď od AI
Rozdíl spočívá v tom, jak porovnávají objekty:
| Metoda/Operátor | Popis | Porovnání pro referenční typy | Porovnání pro hodnotové typy | Přetížení |
|---|---|---|---|---|
Equals() |
Virtuální metoda třídy object, může být přepsána. |
Ve výchozím nastavení porovnává reference (pokud není přepsáno). | Porovnává hodnoty polí (při přepsání nebo pro vestavěné typy). | Možné |
== |
Přetížitelný operátor. | Ve výchozím nastavení porovnává reference (pro referenční typy). | Ve výchozím nastavení porovnává hodnoty (pro hodnotové typy). | Možné |
Příklady:
// Porovnání referenčních typů
string s1 = new string("hello");
string s2 = new string("hello");
string s3 = s1;
Console.WriteLine(s1.Equals(s2)); // True (pokud je přepsáno Equals ve stringu)
Console.WriteLine(s1 == s2); // False (porovnávají se reference)
Console.WriteLine(s1 == s3); // True (stejné reference)
// Porovnání hodnotových typů
int a = 10;
int b = 10;
int c = 20;
Console.WriteLine(a.Equals(b)); // True (porovnávají se hodnoty)
Console.WriteLine(a == b); // True (porovnávají se hodnoty)
Console.WriteLine(a == c); // False (různé hodnoty)
Je důležité pamatovat, že operátor == může být přepsán pro vlastní typy, aby změnil jeho výchozí chování. Metoda Equals() může být také přepsána pro implementaci vlastní logiky porovnání objektů. Ve většině případů se doporučuje používat Equals() pro porovnání referenčních typů a Equals() nebo == pro hodnotové typy, v závislosti na kontextu a požadavcích na výkon.