Hoida Ahamed نشر 9 أغسطس 2021 أرسل تقرير نشر 9 أغسطس 2021 يمكن المقارنه بين بيانات من نوع String String x,y; if(x=="y"); S.O.P(10); هذه الطريقه خاطئه مامن طريقه اخرى 2 اقتباس
0 محمد أبو عواد نشر 9 أغسطس 2021 أرسل تقرير نشر 9 أغسطس 2021 يمكنك استخدام equals بدلا من == كالتالي public static void main(String []args){ String string1 = new String("hello"); String string2 = new String("hello"); System.out.println(string1.equals(string2)); } لنفترض لدينا المتغيرين string1 , string2 , سوف نقارن المتغير الأول مع المتغير الثاني باستخدام equals, اذا كان النصين متشابهين تماما حتى في شكل الحروف صغيرة أو كبيرة فسوف تقوم بارجاع true , ما دون ذلك سوف ترجع false, في المثال المرفق في الأعلى سوف تكون النتيجة true, ولكن ماذا لو غيرنا الحرف الاول من كلمة hello في المتغير الأول كالتالي public static void main(String []args){ String string1 = new String("Hello"); String string2 = new String("hello"); System.out.println(string1.equals(string2)); } لاحظ يوجد اختلاف في شكل الحروف واذا استخدمنا equals سوف تقوم بارجاع false أي أنهما ليس متساويين, اذا أردتي اهمال حالة الاحرف يمكنك استخدام equalsIgnoreCase كالتالي public static void main(String []args){ String string1 = new String("Hello"); String string2 = new String("hello"); System.out.println(string1.equalsIgnoreCase(string2)); } } سوف تهمل حالة الأحرف وترجع true اقتباس
0 Wael Aljamal نشر 9 أغسطس 2021 أرسل تقرير نشر 9 أغسطس 2021 لتوضيح سبب عدم عمل == للمقارنة بين السلسل، حيث أن هذا التحقق == يقوم على التأكد من أن طرفي المساواة يتبعان لموقع ذاكرة واحد، يحدث ذلك لأن السلسل النصية في جافا String عبارة عن أغراض Objects وعند استخدام المقارنة بين الأغراض == نتأكد من أن أحد هذين الغرضين يشير reference للغرض الآخر وتعديل أحدهما يؤدي لتعديل الغرض الآخر .. أما في حال مقارنة متغيرات بأنماط بيانات البسيطة primitive data types مثل int - float - double فتعمل المقارنة == للتأكد من تطابق القيمة وهنا تكون صحيحة. مثال فيه == تعمل مثل equals : Object ob1 = new Object(); Object ob2 = ob1; System.out.println(ob1 == ob2); // مطابقة true System.out.println(ob1.equals(ob2)); // مطابقة true لاحظ إسناد الغرض الأول للفرض الآخر هنا سيكون كلاهما له نفس الموقع في الذاكرة و نفس القيمة ******** أما في حال إنشاء غرضين مختلفين String ob1 = new String("Hi"); String ob2 = new String("Hi"); System.out.println(ob1 == ob2); // false لدينا غرضين مختلفين System.out.println(ob1.equals(ob2)); // true هنا == تعطي عدم تطابق لأن لدينا غرضين مختلفين ************ حالة خاصة في عملية مقارنة السلسل:: String ob1 = "Hi"; String ob2 = "Hi"; // نفس الغرض System.out.println(ob1 == ob2); // مطابقة true System.out.println(ob1.equals(ob2)); // مطابقة true عند كتابة "Hi" هذا عبارة عن غرض له hashCode ثابت، سيكون للمتغيرين نفس العنوان في الذاكرة.. (حالة خاصة) هنا بما أن السلسة النصية ثابتة، يتم عمل مثل ربط بين هذه السلاسل لكي لا تأخذ ذاكرة بيتم إعطاؤوها نفس العنوان **** الحل هو استخدام equals مثل التعليق الآخر إجابة المدرب محمد اقتباس
السؤال
Hoida Ahamed
يمكن المقارنه بين بيانات من نوع String
String x,y; if(x=="y"); S.O.P(10);
هذه الطريقه خاطئه مامن طريقه اخرى
2 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.