เมื่อทดสอบความเท่าเทียมกันของString
Java ฉันใช้มาตลอดequals()
เพราะสำหรับฉันแล้วนี่เป็นวิธีที่เป็นธรรมชาติที่สุดสำหรับฉัน ท้ายที่สุดชื่อของมันก็บอกอยู่แล้วว่าตั้งใจจะทำอะไร แต่เพื่อนร่วมงานของผมเพิ่งบอกฉันได้รับการสอนที่จะใช้แทนcompareTo() == 0
equals()
สิ่งนี้ให้ความรู้สึกผิดธรรมชาติ (ตามที่compareTo()
ตั้งใจไว้เพื่อให้มีการสั่งซื้อและไม่เปรียบเทียบเพื่อความเท่าเทียมกัน) และถึงแม้จะค่อนข้างอันตราย (เพราะcompareTo() == 0
ไม่จำเป็นต้องหมายความถึงความเท่าเทียมกันในทุกกรณีแม้ว่าฉันจะรู้ว่ามันทำString
เพื่อฉันก็ตาม)
เขาไม่ทราบว่าทำไมเขาถูกสอนให้ใช้compareTo()
แทนequals()
สำหรับString
's, และฉันจะยังไม่พบเหตุผลใด ๆ นี่เป็นเรื่องของรสนิยมส่วนตัวจริงๆหรือมีเหตุผลที่แท้จริงสำหรับวิธีใดวิธีหนึ่ง?
compareTo() == 0
ไม่จำเป็นต้องหมายความถึงความเท่าเทียมกันในทุกกรณี" ถูกต้องแน่นอน! นี่คือความหมายของวลี "สอดคล้องกับเท่ากับ" ในข้อกำหนด Java API ตัวอย่างเช่นในข้อกำหนดคลาสที่เปรียบเทียบได้ ตัวอย่างเช่นวิธีการเปรียบเทียบของ String สอดคล้องกับเท่ากับ แต่วิธีการเปรียบเทียบของ BigDecimal ไม่สอดคล้องกับเท่ากับ
.equalsIgnoreCase()
เป็นการเปรียบเทียบที่เร็วที่สุดหากเหมาะสมมิฉะนั้น.equals()
ก็เป็นสิ่งที่คุณต้องการ