Object.ReferenceEquals(Object, Object) Object.ReferenceEquals(Object, Object) Object.ReferenceEquals(Object, Object) Object.ReferenceEquals(Object, Object) Method

Definition

Stellt fest, ob die angegebenen Object-Instanzen dieselbe Instanz sind.Determines whether the specified Object instances are the same instance.

public:
 static bool ReferenceEquals(System::Object ^ objA, System::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 Object Object Object

Das erste zu vergleichende Objekt.The first object to compare.

objB
Object Object Object Object

Das zweite zu vergleichende Objekt.The second object to compare.

Gibt zurück

true, wenn objA dieselbe Instanz wie objB ist oder beide NULL sind, andernfalls false.true if objA is the same instance as objB or if both are null; otherwise, false.

Beispiele

Im folgenden Beispiel wird ReferenceEquals zu bestimmen, ob zwei Objekte dieselbe Instanz sind.The following example uses ReferenceEquals to determine if two objects are the same instance.

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

*/
using System;

class MyClass {

   static void Main() {
      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

*/
Imports System

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 zu den Equals -Methode und den Equality-Operator, der ReferenceEquals Methode kann nicht überschrieben werden.Unlike the Equals method and the equality operator, the ReferenceEquals method cannot be overridden. Aus diesem Grund sollten Sie testen, zwei Objektverweise auf Gleichheit, und Sie sind nicht sicher sind, die Implementierung von der Equals -Methode, die Sie aufrufen können die ReferenceEquals Methode.Because of this, if you want to test two object references for equality and you are unsure about the implementation of the Equals method, you can call the ReferenceEquals method.

Allerdings den Rückgabewert der ReferenceEquals Methode scheint in diesen beiden Szenarien als anomal eingestuft haben:However, the return value of the ReferenceEquals method may appear to be anomalous in these two scenarios:

  • Wenn Sie Werttypen vergleichen zu können.When comparing value types. Wenn objA und objB Werttypen sind, werden mittels Boxing gepackte vor der Übergabe an die ReferenceEquals Methode.If objA and objB are value types, they are boxed before they are passed to the ReferenceEquals method. Dies bedeutet, dass, wenn beide objA und objB darstellen derselben Instanz eines Werttyps, der ReferenceEquals dennoch Methodenrückgabe false, wie im folgende Beispiel gezeigt.This means that if both objA and objB represent the same instance of a value type, the ReferenceEquals method nevertheless returns false, as the following example shows.

    using System;
    
    public class Example
    {
       public static void Main()
       {
          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
    

    Weitere Informationen zu Boxing-Werttypen, finden Sie unter Boxing und Unboxing.For information on boxing value types, see Boxing and Unboxing.

  • Beim Vergleichen von Zeichenfolgen.When comparing strings. Wenn objA und objB sind Zeichenfolgen, die ReferenceEquals Methodenrückgabe true , wenn die Zeichenfolge internalisiert ist.If objA and objB are strings, the ReferenceEquals method returns true if the string is interned. Er führt einen Test keine Wertgleichheit.It does not perform a test for value equality. Im folgenden Beispiel s1 und s2 gleich sind, da sie zwei Instanzen von einer einzelnen Zeichenfolge für die im Internpool vorhanden sind.In the following example, s1 and s2 are equal because they are two instances of a single interned string. Allerdings s3 und s4 ungleich sind, da auch sie werden identische Werte aufweisen, die diese Zeichenfolge nicht internalisiert ist.However, s3 and s4 are not equal, because although they are have identical string values, that string is not interned.

    using System;
    
    public class Example
    {
       public static void Main()
       {
          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 Internalisieren von Zeichenfolgen finden Sie unter String.IsInterned.For more information about string interning, see String.IsInterned.

Gilt für:

Siehe auch