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

정의

지정한 Object 인스턴스가 동일한지 여부를 확인합니다.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

매개 변수

objA
Object Object Object Object

비교할 첫 번째 개체입니다.The first object to compare.

objB
Object Object Object Object

비교할 두 번째 개체입니다.The second object to compare.

반환

objAobjB의 인스턴스가 같거나 둘 다 null인 경우 true이고 그렇지 않으면 false입니다.true if objA is the same instance as objB or if both are null; otherwise, false.

예제

다음 예제에서는 ReferenceEquals 두 개체가 같은 인스턴스 되는지 확인할 수 있습니다.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

*/
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
'

설명

달리 합니다 Equals 메서드와 같음 연산자는 ReferenceEquals 메서드를 재정의할 수 없습니다.Unlike the Equals method and the equality operator, the ReferenceEquals method cannot be overridden. 이 인해 테스트 하려는 경우 두 개체 같음에 대 한 참조 및 구현에 대 한 확실 하지 않은 합니다 Equals 메서드를 호출할 수 있습니다는 ReferenceEquals 메서드.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.

그러나의 반환 값은 ReferenceEquals 메서드는 이러한 두 가지 시나리오에서 비정상으로 표시 될 수 있습니다.However, the return value of the ReferenceEquals method may appear to be anomalous in these two scenarios:

  • 값 형식 비교 합니다.When comparing value types. 경우 objA 하 고 objB 는 값 형식에 전달 되기 전에 boxed 됩니다는 ReferenceEquals 메서드.If objA and objB are value types, they are boxed before they are passed to the ReferenceEquals method. 즉, 둘 다 objAobjB 값 형식의 같은 인스턴스를 ReferenceEquals 그럼에도 불구 하 고 반환 false다음 예제와 같이 합니다.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.

    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
    

    Boxing 값 형식에 대 한 자세한 내용은 Boxing 및 Unboxing합니다.For information on boxing value types, see Boxing and Unboxing.

  • 문자열 비교 합니다.When comparing strings. 하는 경우 objAobjB 는 문자열을 ReferenceEquals 메서드가 반환 되는 true 문자열 내부 풀에 추가 하는 경우.If objA and objB are strings, the ReferenceEquals method returns true if the string is interned. 값이 같은지를 테스트를 수행 하지 않습니다.It does not perform a test for value equality. 다음 예에서 s1s2 이므로 단일 인턴 지정된 문자열의 두 인스턴스가 같은지 합니다.In the following example, s1 and s2 are equal because they are two instances of a single interned string. 그러나 s3s4 문자열이 인턴 지정 되지 동일한 문자열 값을 같지만 때문에, 두 개체가 다릅니다.However, s3 and s4 are not equal, because although they are have identical string values, that string is not interned.

    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
    

    문자열 인터닝에 대 한 자세한 내용은 참조 하세요. String.IsInterned합니다.For more information about string interning, see String.IsInterned.

적용 대상

추가 정보