Middle
Koja je razlika između metode Equals i operatora == u C#?
sobes.tech АИ
Одговор од АИ
Разлика се налази у начину на који пореде објекте:
| Метод/Оператор | Опис | Поређење за референтне типове | Поређење за вредносне типове | Преоптерећење |
|---|---|---|---|---|
Equals() |
Виртуелна метода класе object, може се пренагласити. |
По подразумеваној вредности пореди референце (ако није пренаглашено). | Пореди вредности поља (при пренаглашавању или за уграђене типове). | Могуће |
== |
Оператор који се може пренагласити. | По подразумеваној вредности пореди референце (за референтне типове). | По подразумеваној вредности пореди вредности (за вредносне типове). | Могуће |
Примери:
// Поређење референтних типова
string s1 = new string("hello");
string s2 = new string("hello");
string s3 = s1;
Console.WriteLine(s1.Equals(s2)); // Труе (ако је пренаглашено Equals у string)
Console.WriteLine(s1 == s2); // Фалсе (поређене су референце)
Console.WriteLine(s1 == s3); // Труе (исте референце)
// Поређење вредносних типова
int a = 10;
int b = 10;
int c = 20;
Console.WriteLine(a.Equals(b)); // Труе (поређене вредности)
Console.WriteLine(a == b); // Труе (поређене вредности)
Console.WriteLine(a == c); // Фалсе (различите вредности)
Важно је запамтити да оператор == може бити пренаглашен за прилагођене типове како би се променио његов подразумевани понашање. Метода Equals() такође може бити пренаглашена за имплементацију прилагођене логике поређења објеката. У већини случајева, препоручује се коришћење Equals() за поређење референтних типова, а за вредносне типове — Equals() или ==, у зависности од контекста и захтева за перформансама.