equals في Java
قارن نص String بـ equals حتى تطبع الكلمات المتطابقة true. في Yard.java اكتب String a = "red"; وString b = "red";، ثم اطبع a.equals(b). أضف String c = "blue"; واطبع a.equals(c). ترجم بـ javac Yard.java وشغّل java Yard. يجب أن تُظهر الشاشة true ثم false. عرض ثانٍ يبني كائنين new String("red") حتى تستطيع == طباعة false بينما equals ما زالت تطبع true. اترك debugging للصفحة التالية — هذا الدرس تطابق المحتوى مقابل هوية الكائن.
طابق النص بـ equals
صفحة polymorphism شغّلت أجسام horn مختلفة عبر متغيرات typed من نوع Machine. هذه الصفحة تقارن النص. افتح Yard.java. أبقِ اسم الفئة العامة Yard. احذف عروض Machine / Truck / Car المتبقية إن دفنت قصة السلسلة، وملء abstract المتبقي، وعروض المسار، وأي Scanner للوحة المفاتيح. لا ينتظر البرنامج الكتابة. لا تحتاج سطر import لهذه العروض.
داخل Yard.main ابنِ ثلاث سلاسل:
String a = "red";
String b = "red";
String c = "blue";
اطبع المقارنات:
System.out.println(a.equals(b));
System.out.println(a.equals(c));
الطريقة equals تنظر إلى الحروف. النص نفسه يعيد true. النص المختلف يعيد false.
public class Yard {
public static void main(String[] args) {
String a = "red";
String b = "red";
String c = "blue";
System.out.println(a.equals(b));
System.out.println(a.equals(c));
}
}
من المجلد الذي يحوي Yard.java شغّل javac Yard.java. عندما تطابق الأقواس والأقواس المعقوفة والفواصل المنقوطة، لا يكتب javac سطرًا من عنده. ثم شغّل java Yard — وليس java Yard.java. أزل لاحقة .java من أمر التشغيل. أبقِ فئة عامة واحدة في الملف حتى يطابق الاسم Yard.
تُظهر الشاشة true ثم false. امشِ التشغيل مرة. تبدأ Java من Yard.main. a.equals(b) يقارن red مع red ويطبع true. a.equals(c) يقارن red مع blue ويطبع false. أنت ناديت طريقة على a ومرّرت السلسلة الأخرى كوسيط.
إن ما زلت ترى tone / honk / beep من ملف polymorphism، انتقل إلى ملف تدريس equals وشغّل java Yard مجددًا. إن طبعت السلاسل نفسها بدل نتائج equals، سترى red وblue على الشاشة — لفّ a.equals(b) داخل println حتى يظهر boolean.
قل القاعدة بصوت عالٍ وأنت تراقب الشاشة: equals يسأل هل النص متطابق حرفًا بحرف. لا تخترع نافذة debugger في هذه الصفحة. debugging ينتظر الدرس التالي.
قابل == مع equals على new String
البرنامج الثاني يبني كائني String منفصلين بـ new. كلاهما يحمل النص red. البرنامج يطبع a == b ثم a.equals(b).
public class Yard {
public static void main(String[] args) {
String a = new String("red");
String b = new String("red");
System.out.println(a == b);
System.out.println(a.equals(b));
}
}
ترجم بـ javac Yard.java، ثم شغّل java Yard. تُظهر الشاشة false ثم true. فحص == يسأل هل a وb هما نفس الكائن تمامًا في الذاكرة. استدعاءان new String("red") يبنيان كائنين، لذا تطبع == قيمة false. فحص equals ما زال ينظر إلى الحروف، لذا يطبع true.
اقرأ السطرين داخل main مرة أخرى. السطر الأول: الهوية بـ ==. السطر الثاني: المحتوى بـ equals. أبقِ كلا الطبعتين لهذا الشكل التعليمي حتى يبقى التباين على شاشة واحدة. إن طبعت == فقط، تفقد تطابق المحتوى الذي تعلّمه هذه الصفحة أيضًا.
على literals المبتدئة مثل "red" بلا new، قد تعيد Java استخدام نفس الكائن pooled، لذا قد تبدو == أحيانًا true بالصدفة. هذا العرض الثاني يستخدم new String("red") عمدًا حتى يبقى فحص الهوية بوضوح false بينما المحتوى يبقى true. فضّل equals عندما تهتم بالنص.
إن بقيت عروض polymorphism قريبة، احتفظ بها كتاريخ. لهذا الدرس شغّل ملف تدريس equals حتى تُظهر الشاشة boolean، لا كلمات horn. إن اشتكى javac من فئات عامة مكررة، أبقِ Yard فقط public.
مقارنة مع استدعاءات polymorphism
في صفحة polymorphism، اسم متد واحد شغّل أجسامًا مختلفة عبر متغيرات typed من الوالد. في هذه الصفحة، اسم متد واحد — equals — يجيب هل سلسلتان تحملان نفس النص، و== يجيب هل هما نفس الكائن. ما زلت تترجم Yard.java وتشغّل java Yard. الرموز الجديدة هي equals، وطبعات boolean من نوع true / false، وتباين == مع new String.
إن كان ملف Machine t = new Truck() ما زال مفتوحًا، سترى استدعاءات horn. انتقل إلى ملف equals حتى يبني main سلاسل ويطبع نتائج المقارنة. أبقِ عروض أدوات debugging خارج هذه الصفحة. أبقِ إدخال لوحة المفاتيح خارج هذه الصفحة.
ماذا تترك هذه الصفحة لـ debugging
هذه الصفحة تقارن محتوى السلسلة وتُظهر لماذا == اختيار افتراضي خاطئ للنص. الصفحة التالية تُظهر debugging، حيث تكتشف لماذا يسيء البرنامج السلوك بقراءة دقيقة للشاشة والمصدر. ابقَ مع equals و== هنا. لا تفرض بعد جولة debugger كاملة.
عندما تُصلح لاحقًا فرعًا خاطئًا، فشل equals سبب شائع. عامل هذه الصفحة كنصف المقارنة من تلك القصة المجاورة. أنهِ عرضي Yard حتى يشعر true / false وfalse / true بالتلقائية قبل أن تفتح درس debugging.
قبل debugging
يمكنك مناداة a.equals(b) على نص red متطابق ورؤية true، ثم رؤية false لـ blue. يمكنك بناء كائنين new String("red") ورؤية == تطبع false بينما equals تطبع true. ترجم Yard.java وشغّل java Yard لكل عرض تحتفظ به بدوره. بقي تطابق المحتوى وهوية الكائن منفصلين. الصفحة التالية هي debugging، حيث تصطاد الأخطاء بالشاشة والمصدر جنبًا إلى جنب.
أبقِ عرض السلاسل الثلاث مع equals لفحص محتوى واضح. أبقِ عرض new String لتباين == واضح. أبقِ ملفات debugging خارج هذه الصفحة. هذه العادات الثلاث نقطة تفتيش قبل أن تتقدم. عندما تطبع equals قيمة true للنص المتطابق — وعندما تطبع == قيمة false لكائنين جديدين بذلك النص — أدّى هذا الدرس عمله وأنت جاهز للموضوع التالي عن debugging.
مرّة أخيرة على المجلد: Yard عام واحد، مقارنات سلاسل في main، بلا انتظار لوحة مفاتيح، بلا إجبار على debugger. شغّل javac Yard.java وjava Yard مرة أخرى على العرض المفتوح. إن ما زالت الشاشة تطبع قيم boolean التي تتوقعها، فقصة المقارنة متينة ويمكن للدورة الانتقال إلى debugging في الصفحة التالية.
🧠 اختبر معرفتك
اختبر معرفتك
تحدى نفسك مع هذا الاختبار التفاعلي واكتشف مدى فهمك للموضوع
📝 التعليمات
- اقرأ كل سؤال بعناية
- اختر أفضل إجابة لكل سؤال
- يمكنك إعادة الاختبار عدة مرات كما تريد
- سيتم عرض تقدمك في الأعلى