freeCodeCamp/guide/arabic/java/equality/index.md

4.2 KiB

title localeTitle
Checking for Equality التحقق من المساواة

التحقق من المساواة

في Java ، توجد طريقتان للتحقق مما إذا كان هناك متغيرين هما "نفس": == و .equals() . هذه الطريقتين لا تعمل نفسها ، ولكن.

و == المشغل

عملية المساواة الأساسية في Java ، == كما في var1 == var2 ، تتحقق مما إذا كان var1 و var2 يشيران إلى نفس مرجع الكائن . بمعنى ، إذا كان var1 هو نفس مثيل الفئة في الذاكرة كـ var2 ، فسيكون var1 == var2 صحيحًا.

ومع ذلك ، إذا تم إنشاء var1 و var2 منفصلتين للفئة (أي مع الكلمة الأساسية new ) ، فسيكون var1 == var2 خاطئًا. حتى إذا كان كل من الكائنين يحتويان على نفس الخصائص والقيم بالضبط ، فإن المقارنة == لن تمر لأنها لا تشير إلى نفس الكائن في الذاكرة.

بالنسبة لأنواع المتغيرات البدائية ، مثل int و double ، يمكن دائمًا استخدام عامل == للتحقق من المساواة ، حيث يتم تخزين قيمها مباشرة مع المتغير (وليس كمرجع إلى فتحة أخرى في الذاكرة).

`int var1 = 1; int var2 = 1; System.out.println(var1 == var2) // true

MyObject obj1 = new MyObject(); MyObject obj2 = obj1; MyObject obj3 = new MyObject();

System.out.println(obj1 == obj2) // true System.out.println(obj1 == obj3) // false System.out.println(obj2 == obj3) // false `

طريقة .equals()

تحتوي فئة Object المضمنة في Java ، والتي تمتد بها جميع الفئات الأخرى تلقائيًا ، على عدد من الطرق المضمنة المفيدة. إحدى هذه الطرق equals() ، والتي تأخذ كائنًا آخر كوسيطة لها وتعيد ما إذا كان ينبغي اعتبار الكائنين "متساويين" وفقًا للمنطق ذي الصلة لهذه الفئة.

تعد فئة "السلسلة" واحدة من الأمثلة الأكثر شيوعًا للفئة التي تتجاوز طريقة "يساوي ()". عند المقارنة بين "سلعة" للمساواة ، تحتاج إلى استخدام طريقة "يساوي ()" ، لأن "==" لن يعمل كما هو متوقع.

String s1 = "Bob"; String s2 = "ob"; s2 = "B" + s2; //s2 now is also "Bob" System.out.println(s1 == s2); //false System.out.println(s1.equals(s2)); //true

عند إنشاء فئة جديدة في Java ، ستحتاج غالبًا إلى تجاوز طريقة equals() لتوفير طريقة أكثر فائدة لمقارنة كائنين من نفس الفئة. كيف يتم تنفيذ هذه الطريقة هو ما يصل تماما إلى حكم المطور.

على سبيل المثال، قد تقرر أن اثنين من Person ق ينبغي النظر "على قدم المساواة" إذا هم name و dateOfBirth هي نفسها. سيتم تنفيذ هذا المنطق في طريقة equals() الخاصة بفئة Person :

`public class Person { public String name; public Date dateOfBirth;

public boolean equals(Person person) { 
    return this.name.equals(person.name) && this.dateOfBirth.equals(person.dateOfBirth); 
} 

} `

معظم الفصول المضمنة في Java ، بالإضافة إلى الفئات التي توفرها المكتبات الشائعة ، ستنفذ طريقة equals() بطريقة ذات معنى.

على سبيل المثال، java.util.Set تحدد اجهة أن Set الصورة equals() يرد وطريقة يعود صحيحا إذا "الكائن المحدد أيضا مجموعة، مجموعات لهما نفس الحجم، ولكل عضو من مجموعة محددة في هذه المجموعة ".

ومع ذلك ، إذا لم تتجاوز فئة تطبيق equals() الافتراضي ، فسيتم تطبيق التطبيق الافتراضي ، والذي يستخدم ببساطة عامل == لمقارنة العنصرين.