0Pricing
Java Academy · บทเรียน

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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. this และ toString/equals/hashCode
  2. การประกอบอ็อบเจ็กต์
  3. การจำลองโดเมน (UML→โค้ด)
← กลับไปที่ Java Academy