การตรวจสอบทั้งสองแบบแตกต่างกัน คนแรกที่ตรวจสอบตัวตนที่หนึ่งที่สองสำหรับความเท่าเทียมกัน โดยทั่วไปคำศัพท์สองคำจะเหมือนกันหากอ้างถึงวัตถุเดียวกัน นี่หมายความว่าพวกเขาเท่าเทียมกัน คำสองคำมีค่าเท่ากันถ้าค่าเท่ากัน
ในแง่ของเอกลักษณ์การเขียนโปรแกรมมักจะยุ่งเหยิงด้วยความเท่าเทียมกันในการอ้างอิง หากตัวชี้ของทั้งสองคำมีค่าเท่ากัน (!) วัตถุที่พวกเขาชี้ไปจะเหมือนกันทุกประการ อย่างไรก็ตามหากพอยน์เตอร์แตกต่างกันค่าของอ็อบเจ็กต์ที่ชี้ไปจะยังคงเท่ากัน ใน C # ตัวตนสามารถตรวจสอบได้โดยใช้สถิตย์Object.ReferenceEqualsสมาชิกในขณะที่มีการตรวจสอบความเสมอภาคใช้ไม่คงที่Object.Equalsสมาชิก เนื่องจากคุณหล่อจำนวนเต็มสองจำนวนวัตถุ (ซึ่งเรียกว่า "มวย" BTW) operatior ==ของobjectดำเนินการตรวจสอบครั้งแรกซึ่งเป็นค่าเริ่มต้นแมปไปObject.ReferenceEqualsและการตรวจสอบตัวตน หากความชัดเจนของคุณเรียกEqualsสมาชิกแบบไม่คงที่การจัดส่งแบบไดนามิกจะส่งผลให้เกิดการเรียกร้องInt32.Equalsซึ่งจะตรวจสอบความเท่าเทียมกัน
แนวคิดทั้งสองมีความคล้ายคลึงกัน แต่ไม่เหมือนกัน พวกเขาอาจดูสับสนในตอนแรก แต่ความแตกต่างเล็กน้อยนั้นสำคัญมาก! ลองนึกภาพบุคคล 2 คน ได้แก่ "อลิซ" และ "บ็อบ" ทั้งคู่อาศัยอยู่ในบ้านสีเหลือง จากการสันนิษฐานว่าอลิซและบ็อบอาศัยอยู่ในเขตหนึ่งซึ่งบ้านมีสีแตกต่างกันเท่านั้นพวกเขาทั้งคู่อาศัยอยู่ในบ้านสีเหลืองที่แตกต่างกัน หากเปรียบบ้านทั้งสองหลังคุณจะจำได้ว่าบ้านทั้งสองหลังนั้นเหมือนกันอย่างแน่นอนเพราะทั้งสองหลังมีสีเหลือง! แต่พวกเขาจะไม่ร่วมกันที่บ้านเดียวกันและทำให้บ้านของพวกเขาจะเท่ากันแต่ไม่เหมือนกัน อัตลักษณ์บ่งบอกว่าพวกเขาอาศัยอยู่ในบ้านหลังเดียวกัน
หมายเหตุ : บางภาษากำลังกำหนดตัว===ดำเนินการเพื่อตรวจสอบตัวตน
short myShort = 0; int myInt = 0; Console.WriteLine("{0}{1}{2}", myShort.Equals(myInt), myInt.Equals(myShort), myInt == myShort);ตอนนี้ตรวจสอบกับความเป็นจริง คำทำนายของคุณถูกต้องหรือไม่? ถ้าไม่คุณสามารถอธิบายความคลาดเคลื่อนได้หรือไม่