Sobes.tech
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() или ==, у зависности од контекста и захтева за перформансама.