Ler em inglês

Compartilhar via


Object.ReferenceEquals(Object, Object) Método

Definição

Determina se as instâncias de Object especificadas são a mesma instância.

C#
public static bool ReferenceEquals(object objA, object objB);
C#
public static bool ReferenceEquals(object? objA, object? objB);

Parâmetros

objA
Object

O primeiro objeto a ser comparado.

objB
Object

O segundo objeto a ser comparado.

Retornos

true se objA for a mesma instância que objB ou se ambos forem null; caso contrário, false.

Exemplos

O exemplo a seguir usa ReferenceEquals para determinar se dois objetos são a mesma instância.

C#
object o = null;
object p = null;
object q = new Object();

Console.WriteLine(Object.ReferenceEquals(o, p));
p = q;
Console.WriteLine(Object.ReferenceEquals(p, q));
Console.WriteLine(Object.ReferenceEquals(o, p));

// This code produces the following output:
//   True
//   True
//   False

Comentários

Ao contrário do Equals método e do operador de igualdade, o ReferenceEquals método não pode ser substituído. Por isso, se você quiser testar duas referências de objeto para igualdade e não tiver certeza sobre a implementação do Equals método, poderá chamar o ReferenceEquals método .

No entanto, o valor retornado do ReferenceEquals método pode parecer anormal nestes dois cenários:

  • Ao comparar tipos de valor. Se objA e objB forem tipos de valor, eles serão encaixoados antes de serem passados para o ReferenceEquals método . Isso significa que, se e objAobjB representarem a mesma instância de um tipo de valor, o ReferenceEquals método, no entanto, retornará false, como mostra o exemplo a seguir.

    C#
    int int1 = 3;
    Console.WriteLine(Object.ReferenceEquals(int1, int1));
    Console.WriteLine(int1.GetType().IsValueType);
    
    // The example displays the following output:
    //       False
    //       True
    

    Para obter informações sobre tipos de valor boxing, consulte Boxing e Unboxing.

  • Ao comparar cadeias de caracteres. Se objA e objB forem cadeias de caracteres, o ReferenceEquals método retornará true se a cadeia de caracteres for internada. Ele não executa um teste para igualdade de valor. No exemplo a seguir, s1 e s2 são iguais porque são duas instâncias de uma única cadeia de caracteres interna. No entanto, s3 e s4 não são iguais, pois embora tenham valores de cadeia de caracteres idênticos, essa cadeia de caracteres não é estagiada.

    C#
    String s1 = "String1";
    String s2 = "String1";
    Console.WriteLine("s1 = s2: {0}", Object.ReferenceEquals(s1, s2));
    Console.WriteLine("{0} interned: {1}", s1,
                      String.IsNullOrEmpty(String.IsInterned(s1)) ? "No" : "Yes");
    
    String suffix = "A";
    String s3 = "String" + suffix;
    String s4 = "String" + suffix;
    Console.WriteLine("s3 = s4: {0}", Object.ReferenceEquals(s3, s4));
    Console.WriteLine("{0} interned: {1}", s3,
                      String.IsNullOrEmpty(String.IsInterned(s3)) ? "No" : "Yes");
    
    // The example displays the following output:
    //       s1 = s2: True
    //       String1 interned: Yes
    //       s3 = s4: False
    //       StringA interned: No
    

    Para obter mais informações sobre a internação de cadeia de caracteres, consulte String.IsInterned.

Aplica-se a

Produto Versões
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Confira também