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()` الافتراضي ، فسيتم تطبيق التطبيق الافتراضي ، والذي يستخدم ببساطة عامل `==` لمقارنة العنصرين. |