Sobes.tech
Middle

Qual é a diferença entre o método Equals e o operador == em C#?

sobes.tech IA

Resposta da IA

A diferença reside na forma como eles comparam os objetos:

Método/Operador Descrição Comparação para tipos de referência Comparação para tipos de valor Sobrecarga
Equals() Método virtual da classe object, pode ser sobrescrito. Por padrão, compara referências (se não for sobrescrito). Compara os valores dos campos (quando sobrescrito ou para tipos integrados). Possível
== Operador sobrecarregável. Por padrão, compara referências (para tipos de referência). Por padrão, compara valores (para tipos de valor). Possível

Exemplos:

// Comparação de tipos de referência
string s1 = new string("hello");
string s2 = new string("hello");
string s3 = s1;

Console.WriteLine(s1.Equals(s2)); // True (se sobrescrever Equals em string)
Console.WriteLine(s1 == s2);     // False (referências comparadas)
Console.WriteLine(s1 == s3);     // True (referências iguais)
// Comparação de tipos de valor
int a = 10;
int b = 10;
int c = 20;

Console.WriteLine(a.Equals(b)); // True (valores comparados)
Console.WriteLine(a == b);     // True (valores comparados)
Console.WriteLine(a == c);     // False (valores diferentes)

É importante lembrar que o operador == pode ser sobrecarregado para tipos personalizados para alterar seu comportamento padrão. O método Equals() também pode ser sobrescrito para implementar lógica personalizada de comparação de objetos. Na maioria dos casos, para comparar valores de tipos de referência, recomenda-se usar Equals(), e para tipos de valor, Equals() ou ==, dependendo do contexto e dos requisitos de desempenho.