Sobes.tech
Junior

Como ocorre a comparação de strings em C#? São comparadas as referências às strings ou seus valores?

sobes.tech IA

Resposta da IA

Em C#, as strings são tipos de referência, mas a sua comparação por padrão ocorre por valor. O operador de igualdade (==) e o método Equals comparam o conteúdo das strings, não as referências aos objetos na memória.

Para comparar strings por referência, o que é extremamente raro, pode-se usar o método estático ReferenceEquals.

Aqui estão exemplos:

// Comparação por valor (padrão)
string str1 = "hello";
string str2 = "hello";
bool areEqualByValue = (str1 == str2); // true
bool areEqualByEquals = str1.Equals(str2); // true

// Comparação por referência
string strA = new string(new char[] { 'w', 'o', 'r', 'l', 'd' });
string strB = new string(new char[] { 'w', 'o', 'r', 'l', 'd' });
bool areEqualByReference = object.ReferenceEquals(strA, strB); // false, objetos diferentes na memória

string strC = strA;
bool areEqualByReference2 = object.ReferenceEquals(strA, strC); // true, apontam para o mesmo objeto

Assim, para a maioria dos cenários, a comparação de strings em C# é feita por valor.