this และ toString/equals/hashCode
ใช้ this เพื่ออ้างถึงอ็อบเจ็กต์ปัจจุบัน เขียน toString ที่ให้ข้อมูลเป็นประโยชน์ และใช้งาน equals กับ hashCode อย่างถูกต้อง
this และ toString/equals/hashCode เป็นบทเรียน Java Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Java Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Java Academy มีบทเรียนทั้งหมด 3 บทเรียน
คีย์เวิร์ด this
this อ้างถึงอ็อบเจ็กต์ปัจจุบัน ใช้เพื่อเข้าถึงฟิลด์หรือเรียกใช้ตัวสร้างอื่น คีย์เวิร์ดนี้มีประโยชน์เมื่อชื่อพารามิเตอร์เหมือนกับชื่อฟิลด์ เพราะช่วยให้เจตนาของโค้ดชัดเจน
toString ที่อ่านง่าย
toString() ส่งคืนข้อมูลสรุปของอ็อบเจ็กต์ที่มนุษย์อ่านเข้าใจได้ง่าย ให้เขียนทับเมธอดนี้เพื่อแสดงฟิลด์สำคัญ เช่น รหัสประจำตัวและชื่อ วิธีนี้ทำให้บันทึกการทำงานและข้อความแสดงเพื่อแก้จุดบกพร่องเข้าใจได้ง่ายขึ้นมาก
equals กับ ==
equals ตรวจสอบความเท่ากันเชิงตรรกะ ส่วน == ตรวจสอบว่าการอ้างอิงสองรายการชี้ไปยังอ็อบเจ็กต์เดียวกันหรือไม่ คลาสของโดเมนส่วนใหญ่ควรเขียนทับ equals เพื่อเปรียบเทียบจากเนื้อหา ไม่ใช่จากตำแหน่งในหน่วยความจำ
hashCode ต้องสอดคล้องกับ equals
hashCode ต้องสอดคล้องกับ equals: หาก a.equals(b) เป็นจริง a.hashCode() ต้องเท่ากับ b.hashCode() กฎนี้จำเป็นต่อการทำงานที่ถูกต้องของ HashSet และ HashMap
เคล็ดลับและข้อควรระวัง
เลือกฟิลด์ที่มีค่าเสถียรสำหรับตรวจสอบความเท่ากัน เช่น รหัสประจำตัวหรืออีเมล และทำให้ toString สั้น หลีกเลี่ยงการใช้ชุดข้อมูลที่เปลี่ยนแปลงได้ภายใน equals และ hashCode หากไม่แน่ใจ ให้สร้างเมธอดด้วยเครื่องมือพัฒนาแบบรวม แล้วตรวจทานอีกครั้ง
โค้ด: this, equals, hashCode
การสาธิตสร้างบุคคลสองอ็อบเจ็กต์ที่มีเนื้อหาเหมือนกัน equals ส่งคืนค่า true ค่าแฮชตรงกัน และ HashSet สามารถค้นหาอ็อบเจ็กต์ที่สองได้
public class Main {
// Simple Person class to demo this, toString, equals, hashCode
static class Person {
private int id;
private String name;
// Constructor uses this to set fields
Person(int id, String name) {
this.id = id; // this.id refers to the field
this.name = name; // name comes from the parameter
}
// Human friendly string
@Override
public String toString() {
return "Person{id=" + id + ", name=" + name + "}";
}
// Logical equality: same id and same name
@Override
public boolean equals(Object o) {
if (this == o) return true; // same reference
if (o == null || getClass() != o.getClass()) return false;
Person other = (Person) o;
if (this.id != other.id) return false;
// Compare names safely (null aware)
if (this.name == null) return other.name == null;
return this.name.equals(other.name);
}
// Hash code consistent with equals
@Override
public int hashCode() {
int result = Integer.hashCode(id);
result = 31 * result + (name == null ? 0 : name.hashCode());
return result;
}
}
public static void main(String[] args) {
// Create two persons with the same content
Person a = new Person(1, "Ada");
Person b = new Person(1, "Ada");
// toString shows readable info
System.out.println(a);
// equals compares content, not memory address
System.out.println("a == b ? " + (a == b)); // false (different objects)
System.out.println("a.equals(b) ? " + a.equals(b)); // true (same content)
// hashCode must match for equal objects (useful in hash collections)
System.out.println("hash(a) = " + a.hashCode());
System.out.println("hash(b) = " + b.hashCode());
// Example with HashSet: contains works because equals and hashCode agree
java.util.Set<Person> set = new java.util.HashSet<>();
set.add(a);
System.out.println("set contains b ? " + set.contains(b)); // true
}
}
การตรวจสอบสัญญา
ตรวจสอบอย่างรวดเร็ว: หากคุณเขียนทับ equals คุณควรทำอะไรอีก และเพราะเหตุใด
สรุปทบทวน
สรุปทบทวน: this ช่วยให้การเข้าถึงฟิลด์ชัดเจนขึ้น toString ช่วยแก้จุดบกพร่อง equals เปรียบเทียบเนื้อหา และ hashCode ทำให้ชุดข้อมูลต่าง ๆ สอดคล้องกัน
คำถามที่พบบ่อย
บทเรียน “this และ toString/equals/hashCode” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “this และ toString/equals/hashCode” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Java Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Java Academy มีบทเรียนทั้งหมด 3 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “this และ toString/equals/hashCode”
ใช้ this เพื่ออ้างถึงอ็อบเจ็กต์ปัจจุบัน เขียน toString ที่ให้ข้อมูลเป็นประโยชน์ และใช้งาน equals กับ hashCode อย่างถูกต้อง คุณปฏิบัติ Java Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Java Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Java Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 3 บทเรียน
บทเรียน “this และ toString/equals/hashCode” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Java Academy นี้ได้ไหม
ได้ บทเรียน Java Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- this และ toString/equals/hashCode
- การประกอบอ็อบเจ็กต์
- การจำลองโดเมน (UML→โค้ด)