Object.ReferenceEquals(Object, Object) Methode

Definition

Stellt fest, ob die angegebenen Object-Instanzen dieselbe Instanz sind.

public:
 static bool ReferenceEquals(System::Object ^ objA, System::Object ^ objB);
public static bool ReferenceEquals (object objA, object objB);
public static bool ReferenceEquals (object? objA, object? objB);
static member ReferenceEquals : obj * obj -> bool
Public Shared Function ReferenceEquals (objA As Object, objB As Object) As Boolean

Parameter

objA
Object

Das erste zu vergleichende Objekt.

objB
Object

Das zweite zu vergleichende Objekt.

Gibt zurück

Boolean

true, wenn objA dieselbe Instanz wie objB ist oder beide NULL sind, andernfalls false.

Beispiele

Im folgenden Beispiel wird ReferenceEquals verwendet, um zu bestimmen, ob zwei -Objekte die gleiche -Instanz sind.

using namespace System;
int main()
{
   Object^ o = nullptr;
   Object^ p = nullptr;
   Object^ q = gcnew 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

*/
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
Public Class App
    Public Shared Sub Main() 
        Dim o As Object = Nothing
        Dim p As Object = Nothing
        Dim q As New Object
        Console.WriteLine(Object.ReferenceEquals(o, p))
        p = q
        Console.WriteLine(Object.ReferenceEquals(p, q))
        Console.WriteLine(Object.ReferenceEquals(o, p))
    End Sub 
End Class 
' This code produces the following output:
'
' True
' True
' False
'

Hinweise

Im Gegensatz Equals zur -Methode und dem Gleichheitsoperator kann ReferenceEquals die Methode nicht überschrieben werden. Aus diesem Grund können Sie die -Methode aufrufen, wenn Sie zwei Objektverweise auf Gleichheit testen möchten und Sie sich nicht sicher sind, welche Implementierung die Equals Methode ReferenceEquals hat.

Allerdings kann der Rückgabewert der Methode in diesen beiden Szenarien ReferenceEquals anomal erscheinen:

  • Beim Vergleichen von Werttypen. Wenn objA und objB Werttypen sind, werden sie geschachtelt, bevor sie an die -Methode übergeben ReferenceEquals werden. Dies bedeutet, dass die Methode dennoch zurückgibt, wenn sowohl als auch dieselbe Instanz eines Werttyps objA objB ReferenceEquals false darstellen, wie im folgenden Beispiel gezeigt.

    int int1 = 3;
    Console.WriteLine(Object.ReferenceEquals(int1, int1));
    Console.WriteLine(int1.GetType().IsValueType);
    
    // The example displays the following output:
    //       False
    //       True
    
    Public Module Example
       Public Sub Main
          Dim int1 As Integer = 3
          Console.WriteLine(Object.ReferenceEquals(int1, int1))
          Console.WriteLine(int1.GetType().IsValueType)
       End Sub
    End Module
    ' The example displays the following output:
    '       False
    '       True
    

    Informationen zu Boxing-Werttypen finden Sie unter Boxing und Unboxing.

  • Beim Vergleichen von Zeichenfolgen. Wenn objA und objB Zeichenfolgen sind, gibt ReferenceEquals die Methode true zurück, wenn die Zeichenfolge intern ist. Es wird kein Test auf Wertgleichheit durchgeführt. Im folgenden Beispiel sind s1 und s2 gleich, da sie zwei Instanzen einer einzelnen internierten Zeichenfolge sind. Und sind jedoch nicht gleich, da sie zwar s3 s4 identische Zeichenfolgenwerte haben, diese Zeichenfolge jedoch nicht interniert ist.

    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
    
    Module Example
       Public Sub Main()
          Dim s1 As String = "String1"
          Dim s2 As String = "String1"
          Console.WriteLine("s1 = s2: {0}", Object.ReferenceEquals(s1, s2))
          Console.WriteLine("{0} interned: {1}", s1, 
                            If(String.IsNullOrEmpty(String.IsInterned(s1)), "No", "Yes"))
    
          Dim suffix As String = "A"
          Dim s3 = "String" + suffix
          Dim s4 = "String" + suffix
          Console.WriteLine("s3 = s4: {0}", Object.ReferenceEquals(s3, s4))
          Console.WriteLine("{0} interned: {1}", s3, 
                            If(String.IsNullOrEmpty(String.IsInterned(s3)), "No", "Yes"))
       End Sub
    End Module
    ' The example displays the following output:
    '       s1 = s2: True
    '       String1 interned: Yes
    '       s3 = s4: False
    '       StringA interned: No
    

    Weitere Informationen zum Internieren von Zeichenfolgen finden Sie unter String.IsInterned .

Gilt für

Siehe auch