ฉันพบคำถามนี้ในการทดสอบและต้องการแบ่งปันกับคุณ คำถามมีดังนี้: มีตัวแปรสตริงสองตัว x และ y เมื่อ if (x.equals(y) == true) มีสองสตริงนี้หรือไม่ การใช้รหัสแฮชที่แตกต่างกัน การตัดสินถูกต้องหรือไม่ คำตอบ: ผิด พวกเขามีค่ารหัสแฮชเดียวกัน การวิเคราะห์: คำถามนี้จะตรวจสอบวิธีการเข้าถึงของออบเจ็กต์ String เป็นหลัก อันดับแรกเราต้องชี้แจงว่าค่ารหัสแฮชของตัวแปร String คืออะไร สถานะของวัตถุ String ที่เก็บไว้ในหน่วยความจำจะถูกเก็บไว้ในตารางแฮช เมื่อมีการสร้างสตริงที่แตกต่างกัน สตริงเหล่านั้นจะสอดคล้องกับรหัสแฮช ของสตริง รหัสเป็นประเภท int รหัสแฮชของออบเจ็กต์ String คำนวณตามสูตรต่อไปนี้: s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1 ] หมายเหตุ: ใช้อัลกอริทึม int โดยที่ s[i] คืออักขระ i-th ของสตริง n คือความยาวของสตริง และ ^ หมายถึงการยกกำลัง (ค่าแฮชของสตริงว่างคือ 0) วิธีการ hashCode() ในข้อมูลประเภท String สืบทอดวิธีการ hashCode() ในคลาส Object และวัตถุประสงค์หลักคือเพื่อปรับปรุงประสิทธิภาพของตารางแฮช (java.util.Hashtable) . ปรับประสิทธิภาพการเข้าถึงให้เหมาะสม เมื่อสตริงการประกาศที่เหมือนกันสองรายการปรากฏขึ้น อินสแตนซ์ออบเจ็กต์ใหม่จะไม่ถูกสร้างขึ้นใหม่ แต่รหัสแฮชที่มีอยู่จะถูกส่งกลับและส่งไปยังข้อมูลอ้างอิงที่เกี่ยวข้อง ขอแนะนำข้อตกลงทั่วไปของ HashCode ซึ่งมีเนื้อหาคร่าวๆ ดังนี้ ในระหว่างการดำเนินการของแอปพลิเคชัน Java เมื่อมีการเรียกใช้เมธอด hashCode บนอ็อบเจ็กต์เดียวกันสองครั้ง จะต้องส่งคืนจำนวนเต็มเดียวกันอย่างสม่ำเสมอ โดยมีเงื่อนไขว่าข้อมูลที่ใช้ในการเปรียบเทียบ วัตถุเท่ากับยังไม่ได้รับการแก้ไข จำนวนเต็มนี้ไม่จำเป็นต้องคงค่าเดิมตั้งแต่การดำเนินการหนึ่งของแอปพลิเคชันหนึ่งไปยังอีกการดำเนินการหนึ่งของแอปพลิเคชันเดียวกัน หากวัตถุสองชิ้นมีค่าเท่ากันตามวิธีเท่ากับ (วัตถุ) (หมายเหตุ: คำถามนี้เป็นตัวอย่างทั่วไป) จะต้องสร้างจำนวนเต็มเดียวกันเมื่อมีการเรียกใช้เมธอด hashCode() ในแต่ละผลลัพธ์ของทั้งสองวัตถุ หากทั้งสองอ็อบเจ็กต์ไม่เท่ากันตามเมธอดเท่ากับ (java.lang.Object) ดังนั้นการเรียกเมธอด hashCode() บนอ็อบเจ็กต์ใดวัตถุหนึ่งไม่จำเป็นต้องสร้างผลลัพธ์จำนวนเต็มที่แตกต่างกัน อย่างไรก็ตาม ในการใช้งานจริง การสร้างผลลัพธ์จำนวนเต็มที่แตกต่างกันสำหรับวัตถุที่แตกต่างกันสามารถปรับปรุงประสิทธิภาพของตารางแฮชได้
บทความนี้มาจากบล็อก CSDN โปรดระบุแหล่งที่มาเมื่อพิมพ์ซ้ำ: http://blog.csdn.net/ComputerHeart/archive/2009/12/18/5030719.aspx
-