entre diferencia and c# object stringbuilder equals-operator referenceequals

and - Diferencias C#entre operator==, StringBuilder.Equals, Object.Equals y Object.ReferenceEquals



or== c# (3)

Está utilizando 4 métodos diferentes de comparación, dando como resultado diferentes resultados:

  • El operador == hará una comprobación por defecto si las referencias son iguales. En este caso, tiene dos instancias, por lo que tienen dos referencias diferentes. El comportamiento de == puede anularse por cualquier tipo (como una string tiene su propio método de comparación), pero en el caso de StringBuilder no lo es.
  • Método StringBuilder.Equals(StringBuilder) se comparará con otro StringBuilder y comparará algunos valores internos. Estos valores son, en tu caso, lo mismo. Lo extraño es que StringBuilder no anula el método StringBuilder.Equals(object) para aplicar la misma lógica.
  • Método object.Equals(object, object) intentará llamar al método .Equals(object) de uno de los objetos. En este caso: StringBuilder.Equals(object) que, como dije, no tenía la lógica para comparar los valores. Resultando solo una comparación de las referencias de ambas instancias.
  • Object.ReferenceEquals simplemente comparará las referencias.

Para más información, ver:

Tengo una pregunta sobre Object.Equals e Equals(object) . Mi código de muestra está a continuación:

class Program { static void Main(string[] args) { var sb1 = new StringBuilder("Food"); var sb2 = new StringBuilder("Food"); Console.WriteLine(sb1 == sb2); Console.WriteLine(sb1.Equals(sb2)); Console.WriteLine(Object.Equals(sb1, sb2)); Console.WriteLine(Object.ReferenceEquals(sb1, sb2)); Console.ReadLine(); } }

El resultado es:

False True False False

Pero en lo que a mí respecta, Object.Equals(sb1, sb2) llama internamente a sb1.Equals(sb2) entonces ¿por qué da dos resultados diferentes?


StringBuilder.equals no compara los objetos, sino más bien desde Equals(StringBuilder) :

"Verdadero si esta instancia y sb tienen valores de cadena , Capacidad y Máx. De capacidad iguales ; de lo contrario, son falsos".

El resto de los controles que está haciendo compara la referencia.