61 lines
4.2 KiB
Markdown
61 lines
4.2 KiB
Markdown
---
|
||
title: Checking for Equality
|
||
localeTitle: التحقق من المساواة
|
||
---
|
||
# التحقق من المساواة
|
||
|
||
في 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()` الافتراضي ، فسيتم تطبيق التطبيق الافتراضي ، والذي يستخدم ببساطة عامل `==` لمقارنة العنصرين. |