Baca dalam bahasa Inggris

Bagikan melalui


Object.ReferenceEquals(Object, Object) Metode

Definisi

Menentukan apakah instans yang ditentukan Object adalah instans yang sama.

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

Parameter

objA
Object

Objek pertama yang dibandingkan.

objB
Object

Objek kedua untuk dibandingkan.

Mengembalikan

true jika objA adalah instans yang sama seperti objB atau jika keduanya null; jika tidak, false.

Contoh

Contoh berikut menggunakan ReferenceEquals untuk menentukan apakah dua objek adalah instans yang sama.

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

Keterangan

Equals Tidak seperti metode dan operator kesetaraan, ReferenceEquals metode tidak dapat ditimpa. Karena itu, jika Anda ingin menguji dua referensi objek untuk kesetaraan dan Anda tidak yakin tentang implementasi Equals metode , Anda dapat memanggil ReferenceEquals metode .

Namun, nilai ReferenceEquals pengembalian metode mungkin tampak anomali dalam dua skenario ini:

  • Saat membandingkan jenis nilai. Jika objA dan objB adalah jenis nilai, mereka dikotak sebelum diteruskan ke ReferenceEquals metode . Ini berarti bahwa jika keduanya objA dan objB mewakili instans yang sama dari jenis nilai, ReferenceEquals metode tersebut mengembalikan false, seperti yang ditunjukkan contoh berikut.

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

    Untuk informasi tentang jenis nilai tinju, lihat Tinju dan Buka Kotak.

  • Saat membandingkan string. Jika objA dan objB merupakan string, ReferenceEquals metode akan kembali true jika string diinternasi. Ini tidak melakukan pengujian untuk kesetaraan nilai. Dalam contoh berikut, s1 dan s2 sama karena merupakan dua instans dari satu string magang. Namun, s3 dan s4 tidak sama, karena meskipun memiliki nilai string yang identik, string tersebut tidak diinternasi.

    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
    

    Untuk informasi selengkapnya tentang interning string, lihat String.IsInterned.

Berlaku untuk

Produk Versi
.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

Lihat juga