Bagikan melalui


Perbandingan kesetaraan (Panduan Pemrograman C#)

Terkadang perlu membandingkan dua nilai untuk kesetaraan. Dalam beberapa kasus, Anda menguji kesetaraan nilai, juga dikenal sebagai kesetaraan, yang berarti bahwa nilai yang dikandung oleh dua variabel sama. Dalam kasus lain, Anda harus menentukan apakah dua variabel merujuk ke objek dasar yang sama dalam memori. Jenis kesetaraan ini disebut kesetaraan referensi, atau identitas. Topik ini menjelaskan kedua jenis kesetaraan ini dan menyediakan tautan ke topik lain untuk informasi lebih lanjut.

Kesetaraan referensi

Kesetaraan referensi berarti bahwa dua referensi objek merujuk ke objek yang mendasar yang sama. Ini dapat terjadi melalui penugasan sederhana, seperti yang ditunjukkan dalam contoh berikut.

using System;
class Test
{
    public int Num { get; set; }
    public string Str { get; set; }

    public static void Main()
    {
        Test a = new Test() { Num = 1, Str = "Hi" };
        Test b = new Test() { Num = 1, Str = "Hi" };

        bool areEqual = System.Object.ReferenceEquals(a, b);
        // False:
        System.Console.WriteLine($"ReferenceEquals(a, b) = {areEqual}");

        // Assign b to a.
        b = a;

        // Repeat calls with different results.
        areEqual = System.Object.ReferenceEquals(a, b);
        // True:
        System.Console.WriteLine($"ReferenceEquals(a, b) = {areEqual}");
    }
}

Dalam kode ini, dua objek dibuat, tetapi setelah pernyataan penugasan, kedua referensi merujuk ke objek yang sama. Oleh karena itu mereka memiliki kesetaraan referensi. ReferenceEquals Gunakan metode untuk menentukan apakah dua referensi merujuk ke objek yang sama.

Konsep kesetaraan referensi hanya berlaku untuk jenis referensi. Objek jenis nilai tidak dapat memiliki kesetaraan referensi karena ketika instans jenis nilai ditetapkan ke variabel, salinan nilai dibuat. Oleh karena itu Anda tidak pernah dapat memiliki dua struktur yang tidak dikotak yang merujuk ke lokasi yang sama dalam memori. Selain itu, jika Anda menggunakan ReferenceEquals untuk membandingkan dua jenis nilai, hasilnya akan falseselalu , bahkan jika nilai yang terkandung dalam objek semuanya identik. Ini karena setiap variabel dikotak ke dalam instans objek terpisah. Untuk informasi selengkapnya, lihat Cara menguji kesetaraan referensi (Identitas).

Kesetaraan nilai

Kesetaraan nilai berarti bahwa dua objek berisi nilai atau nilai yang sama. Untuk jenis nilai primitif seperti int atau bool, pengujian untuk kesetaraan nilai sangat mudah. Anda dapat menggunakan operator ==, seperti yang ditunjukkan dalam contoh berikut.

int a = GetOriginalValue();  
int b = GetCurrentValue();  
  
// Test for value equality.
if (b == a)
{  
    // The two integers are equal.  
}  

Untuk sebagian besar jenis lainnya, pengujian untuk kesetaraan nilai lebih kompleks karena mengharuskan Anda memahami bagaimana jenis mendefinisikannya. Untuk kelas dan struktur yang memiliki beberapa bidang atau properti, kesetaraan nilai sering didefinisikan untuk berarti bahwa semua bidang atau properti memiliki nilai yang sama. Misalnya, dua Point objek mungkin didefinisikan setara jika pointA.X sama dengan pointB.X dan pointA.Y sama dengan pointB.Y. Untuk rekaman, kesetaraan nilai berarti bahwa dua variabel dari tipe rekaman adalah sama jika tipenya sama dan semua nilai properti serta bidangnya sama.

Namun, tidak ada persyaratan bahwa kesetaraan didasarkan pada semua bidang dalam jenis. Ini dapat didasarkan pada subset. Ketika Anda membandingkan jenis yang tidak Anda miliki, Anda harus memastikan untuk memahami secara khusus bagaimana kesetaraan didefinisikan untuk jenis tersebut. Untuk informasi selengkapnya tentang cara menentukan kesetaraan nilai di kelas dan struktur Anda sendiri, lihat Cara menentukan kesetaraan nilai untuk jenis.

Kesetaraan nilai untuk nilai floating-point

Pembandingan kesetaraan nilai floating-point (double dan float) bermasalah karena ketidaktepatan aritmatika floating-point di komputer berbasis biner. Untuk informasi selengkapnya, lihat komentar dalam topik System.Double.

Judul Deskripsi
Cara menguji kesetaraan referensi (Identitas) Menjelaskan cara menentukan apakah dua variabel memiliki kesetaraan referensi.
Cara menentukan kesetaraan nilai untuk jenis Menjelaskan cara memberikan definisi kustom kesetaraan nilai untuk jenis.
Jenis Menyediakan informasi tentang sistem jenis C# dan tautan ke informasi tambahan.
Rekaman Menyediakan informasi tentang jenis catatan, yang menguji kesetaraan nilai secara default.