0Pricing
Java Academy · درس

this وtoString/equals/hashCode

استخدم this للإشارة إلى الكائن الحالي، واكتب toString مفيدًا، ونفّذ equals وhashCode بطريقة صحيحة.

this وtoString/equals/hashCode درس مجاني في Java Academy على CoddyKit. هذا هو الدرس 1 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Java Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Java Academy 3 دروس في المجموع.

الكلمة المفتاحية this

this تشير إلى الكائن الحالي. استخدمها للوصول إلى الحقول أو لاستدعاء منشئ آخر. وتفيد عندما تكون أسماء المعلمات مماثلة لأسماء الحقول، إذ تجعل مقصدك واضحًا.

دالة toString() واضحة

toString() تعيد ملخصًا سهل الفهم للكائن. أعد تعريفها لعرض الحقول الأساسية مثل id وname. وهذا يجعل السجلات وطباعات التصحيح أسهل بكثير في الفهم.

equals مقابل ==

يفحص equals التساوي المنطقي، بينما يفحص == ما إذا كان مرجعان يشيران إلى الكائن نفسه. يجب أن تعيد معظم أصناف المجال تعريف equals للمقارنة حسب المحتوى، لا حسب عنوان الذاكرة.

توافق hashCode مع equals

يجب أن يكون hashCode متسقًا مع equals: إذا كانت a.equals(b) تساوي true، فيجب أن تساوي a.hashCode() قيمة b.hashCode(). هذه القاعدة ضرورية لكي يعمل HashSet وHashMap بشكل صحيح.

نصائح ومزالق

اختر حقولًا ثابتة للمساواة، مثل id أو email، واجعل toString مختصرًا. تجنب استخدام المجموعات القابلة للتغيير داخل equals وhashCode. عند عدم التأكد، ولّد الأساليب باستخدام IDE وراجعها.

الشفرة: 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» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Java Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Java Academy 3 دروس في المجموع.

ماذا ستتعلم في «this وtoString/equals/hashCode»؟

استخدم this للإشارة إلى الكائن الحالي، واكتب toString مفيدًا، ونفّذ equals وhashCode بطريقة صحيحة. تتمرن على Java Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Java Academy؟

لا تُشترط خبرة سابقة. Java Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 3.

كم من الوقت يستغرق درس «this وtoString/equals/hashCode»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Java Academy هذا؟

نعم. كل درس في Java Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. this وtoString/equals/hashCode
  2. تركيب الكائنات
  3. نمذجة النطاق (من UML إلى الشفرة)
← العودة إلى Java Academy