Kedua pemeriksaan tersebut berbeda. Yang pertama memeriksa identitas , yang kedua untuk kesetaraan . Secara umum, dua istilah identik, jika merujuk pada objek yang sama. Ini menyiratkan bahwa mereka setara. Dua suku sama, jika nilainya sama.
Dalam istilah identitas pemrograman biasanya dirusak oleh persamaan referensi. Jika penunjuk ke kedua suku sama (!), Maka obyek yang mereka tunjuk sama persis. Namun, jika penunjuknya berbeda, nilai objek yang dituju masih bisa sama. Dalam C # identitas dapat diperiksa dengan menggunakan Object.ReferenceEqualsanggota statis , sedangkan kesetaraan diperiksa menggunakan anggota non-statis Object.Equals. Karena Anda pengecoran dua bilangan bulat ke objek (yang disebut "tinju", btw), yang operatior ==dari objectmelakukan cek pertama, yang secara default dipetakan ke Object.ReferenceEqualsdan memeriksa identitas. Jika Anda secara eksplisit memanggil Equals-member non-statis , pengiriman dinamis menghasilkan panggilan ke Int32.Equals, yang memeriksa kesetaraan.
Kedua konsep tersebut serupa, tetapi tidak sama. Awalnya mungkin tampak membingungkan, tetapi perbedaan kecil itu sangat penting! Bayangkan dua orang, yaitu "Alice" dan "Bob". Mereka berdua tinggal di rumah kuning. Berdasarkan asumsi, Alice dan Bob tinggal di sebuah distrik yang rumahnya hanya berbeda warna, keduanya bisa tinggal di rumah kuning yang berbeda. Jika Anda membandingkan kedua rumah, Anda akan mengenali, bahwa keduanya sama sekali, karena keduanya berwarna kuning! Namun, mereka tidak berbagi rumah yang sama sehingga rumah mereka sama , tetapi tidak identik . Identitas menyiratkan bahwa mereka tinggal di rumah yang sama .
Catatan : beberapa bahasa menentukan ===operator untuk memeriksa identitas.
short myShort = 0; int myInt = 0; Console.WriteLine("{0}{1}{2}", myShort.Equals(myInt), myInt.Equals(myShort), myInt == myShort);Sekarang periksa dengan kenyataan. Apakah prediksi Anda benar? Jika tidak, dapatkah Anda menjelaskan perbedaannya?