الفكرة ببساطة
عند مقارنة نصين من النوع String غالبًا نريد أن نسأل: هل يحتويان الأحرف نفسها؟ لهذا السؤال نستخدم equals()، وليس ==.
String Comparison
عند مقارنة نصين من النوع String غالبًا نريد أن نسأل: هل يحتويان الأحرف نفسها؟ لهذا السؤال نستخدم equals()، وليس ==.
ما الذي تقارنه ==: مع int تقارن == القيم. لكن مع String تقارن هل المتغيران يشيران إلى الكائن نفسه. تخيّل بطاقتين منفصلتين مكتوبًا عليهما Java: الكتابة متطابقة، لكنهما ليستا البطاقة نفسها.
a.equals(b) تقارن الأحرف مع مراعاة حالتها. لذلك Java تساوي Java، لكنها لا تساوي JAVA في هذه المقارنة.
a.equalsIgnoreCase(b) تقارن المحتوى دون اعتبار الفرق بين الحروف الكبيرة والصغيرة. لذلك Java وJAVA تعطيان true هنا.
لماذا استخدمنا new String: أنشأنا كائنين منفصلين عمدًا حتى يظهر فرق المرجع عن المحتوى. قد تعطي == نتيجة true في أمثلة أخرى عندما يشترك المتغيران في الكائن نفسه؛ هذا لا يجعلها بديلًا لمقارنة المحتوى.
String a = new String("Java");
String b = new String("Java");
System.out.println(a == b);
System.out.println(a.equals(b));
System.out.println(a.equalsIgnoreCase("JAVA"));String مستقلًا في a وآخر في b، وكلاهما يحتوي Java.a == b تعطي false؛ لأن الكائنين منفصلان.a.equals(b) تعطي true؛ لأن المحتوى متطابق.a.equalsIgnoreCase("JAVA") تعطي true أيضًا؛ لأنها تتجاهل حالة الأحرف.اسأل نفسك: هل أريد مقارنة المرجع أم المحتوى؟ لمقارنة النص استخدم equals()، أو equalsIgnoreCase() عند تجاهل حالة الأحرف. أمثلتنا تستخدم نصوصًا غير null، والمحاكاة تقبل حروف English ومسافات فقط.
غيّر النصين داخل new String. جرّب Java وJAVA، ثم Java وJava، وقارن نواتج الأسطر الثلاثة.
محاكاة لهذا المثال المحدد، وليست تشغيلًا لكود Java عشوائي.