คำถามติดแท็ก equals-operator

12
ไม่สามารถใช้โอเปอเรเตอร์ == กับประเภททั่วไปใน C # ได้หรือไม่
ตามเอกสารของ==ผู้ประกอบการในMSDN , สำหรับประเภทค่าที่กำหนดไว้ล่วงหน้าตัวดำเนินการความเท่าเทียมกัน (==) จะส่งกลับค่าจริงถ้าค่าของตัวถูกดำเนินการเท่ากันเท็จมิฉะนั้น สำหรับชนิดการอ้างอิงอื่นที่ไม่ใช่สตริง == จะส่งกลับค่าจริงถ้าตัวถูกดำเนินการทั้งสองอ้างถึงวัตถุเดียวกัน สำหรับประเภทสตริง == เปรียบเทียบค่าของสตริง ประเภทค่าที่ผู้ใช้กำหนดสามารถโอเวอร์โหลดตัวดำเนินการ == (ดูโอเปอเรเตอร์) ดังนั้นประเภทการอ้างอิงที่ผู้ใช้กำหนดสามารถทำได้ โดยค่าเริ่มต้น == จะทำงานตามที่อธิบายไว้ข้างต้นสำหรับทั้งประเภทการอ้างอิงที่กำหนดไว้ล่วงหน้าและที่ผู้ใช้กำหนด เหตุใดข้อมูลโค้ดนี้จึงไม่สามารถรวบรวมได้ bool Compare<T>(T x, T y) { return x == y; } ฉันได้รับข้อผิดพลาดผู้ประกอบการ '==' ไม่สามารถนำไปใช้กับตัวถูกดำเนินการชนิด 'T' และ 'T' ฉันสงสัยว่าเพราะเท่าที่ฉันเข้าใจตัว==ดำเนินการที่กำหนดไว้ล่วงหน้าสำหรับทุกประเภท? แก้ไข:ขอบคุณทุกคน ตอนแรกฉันไม่ได้สังเกตว่าคำสั่งนั้นเกี่ยวกับประเภทการอ้างอิงเท่านั้น ฉันยังคิดว่าการเปรียบเทียบแบบทีละบิตมีไว้สำหรับค่าทุกประเภทซึ่งตอนนี้ฉันรู้ว่าไม่ถูกต้อง แต่ในกรณีที่ฉันใช้ประเภทอ้างอิงตัว==ดำเนินการจะใช้การเปรียบเทียบการอ้างอิงที่กำหนดไว้ล่วงหน้าหรือจะใช้ตัวดำเนินการรุ่นที่มีการโอเวอร์โหลดของผู้ประกอบการหรือไม่ แก้ไข 2:จากการทดลองและข้อผิดพลาดเราเรียนรู้ว่า==ผู้ประกอบการจะใช้การเปรียบเทียบการอ้างอิงที่กำหนดไว้ล่วงหน้าเมื่อใช้ประเภททั่วไปที่ไม่ จำกัด ที่จริงแล้วคอมไพเลอร์จะใช้วิธีการที่ดีที่สุดที่จะหาอาร์กิวเมนต์ประเภทที่ จำกัด แต่จะไม่ดูเพิ่มเติม ตัวอย่างเช่นรหัสด้านล่างจะพิมพ์ทุกtrueครั้งแม้ว่าTest.test<B>(new B(), new …

7
Java: Integer เท่ากับ vs. ==
ในฐานะของ Java 1.5 คุณสามารถแลกเปลี่ยนIntegerกับintสถานการณ์ได้มากมาย อย่างไรก็ตามฉันพบข้อบกพร่องที่อาจเกิดขึ้นในรหัสของฉันที่ทำให้ฉันประหลาดใจเล็กน้อย รหัสต่อไปนี้: Integer cdiCt = ...; Integer cdsCt = ...; ... if (cdiCt != null && cdsCt != null && cdiCt != cdsCt) mismatch = true; ดูเหมือนว่าจะตั้งค่าไม่ตรงกันอย่างไม่ถูกต้องเมื่อค่าเท่ากันแม้ว่าฉันจะไม่สามารถระบุได้ภายใต้สถานการณ์ใด ฉันตั้งเบรกพอยต์ใน Eclipse และเห็นว่าIntegerค่าทั้ง 137 และฉันตรวจสอบการแสดงออกบูลีนและมันบอกว่ามันเป็นเท็จ แต่เมื่อฉันก้าวข้ามมันก็ตั้งค่าไม่ตรงกันเป็นจริง การเปลี่ยนเงื่อนไขเป็น: if (cdiCt != null && cdsCt != null && !cdiCt.equals(cdsCt)) แก้ไขปัญหา มีใครเล่าให้ฟังว่าทำไมสิ่งนี้ถึงเกิดขึ้นได้บ้าง? …

3
ความหมายของ“ (1,) == 1 ใน Python คืออะไร?
ฉันกำลังทดสอบโครงสร้างทูเพิลและฉันพบว่ามันแปลกเมื่อฉันใช้ตัว==ดำเนินการเช่น: >>> (1,) == 1, Out: (False,) เมื่อฉันกำหนดสองนิพจน์นี้ให้กับตัวแปรผลลัพธ์จะเป็นจริง: >>> a = (1,) >>> b = 1, >>> a==b Out: True คำถามนี้แตกต่างจากกฎไวยากรณ์ของคอมมาของPython tupleในมุมมองของฉัน ฉันถามกลุ่มของนิพจน์ระหว่าง==ตัวดำเนินการ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.