البرمجة

تجنب استخدام == و != في مقارنة السلاسل

المشكلة التي تواجهها في الكود تتعلق بطريقة مقارنة السلاسل (Strings). في لغة الجافا، لا يمكن استخدام المُعاملين == و != لمقارنة السلاسل بشكل صحيح، بل يجب استخدام الدالة equals() لذلك.

عند استخدام == و != للمقارنة بين السلاسل في الجافا، فإنها تقارن بين مراجع الذاكرة للسلاسل بدلاً من المحتوى الفعلي للسلسلة. وبما أنك تقوم بقارنة السلاسل “admin” و “123” باستخدام == و !=، فإن الشرط لن يعمل كما هو متوقع.

لتصحيح هذا، يجب استخدام دالة equals() للمقارنة بين السلاسل. هذه الدالة تقارن المحتوى الفعلي للسلسلة بدلاً من مراجع الذاكرة. لذا، يمكنك تعديل شروطك في الكود ليصبح مثل التالي:

java
if(username.equals("admin") && password.equals("123")) { System.out.println("Welcome " + username + "\n*** Login Sucessfully ***" + "\n*** Access Granted ***"); } else if(!username.equals("admin") && password.equals("123")) { System.out.println("Sorry, username is incorrect!\n*** Access Denied ***"); } else if(username.equals("admin") && !password.equals("123")) { System.out.println("Sorry, password is incorrect!\n*** Access Denied ***"); } else if(!username.equals("admin") && !password.equals("123")) { System.out.println("Sorry, username and password is incorrect!\n*** Access Denied ***"); }

باستخدام equals()، ستحصل على مقارنة صحيحة لمحتوى السلاسل وستتمكن من تنفيذ الشروط بشكل صحيح وفقاً لتوقعاتك.

المزيد من المعلومات

بالطبع، دعني أواصل شرح هذا الموضوع بشكل أكبر وأوضح.

عندما تستخدم == للمقارنة بين السلاسل في الجافا، فإنك في الواقع تقارن بين مراجع الذاكرة لهذه السلاسل، أي عناوين الذاكرة التي يتم تخزين السلاسل فيها. وعندما تقوم بإنشاء سلسلة جديدة باستخدام String username = "admin";، فإن الجافا قد تخزن هذه السلسلة في منطقة الذاكرة المخصصة للثوابت. وعند إنشاء سلسلة جديدة مثل String inputUsername = inData.readLine();، فإن الجافا قد تخزن هذه السلسلة في منطقة الذاكرة المخصصة للمتغيرات. وبالتالي، عند مقارنة username == inputUsername، فإن النتيجة ستكون دائماً false، حتى لو كانت السلاسل تحتوي على نفس المحتوى.

لحل هذه المشكلة، يجب استخدام دالة equals() التي تقارن بين محتوى السلاسل بدلاً من مراجع الذاكرة. وبالتالي، عند استخدام username.equals(inputUsername)، ستتمكن من مقارنة المحتوى الفعلي للسلاسل وليس مراجع الذاكرة.

الأمر نفسه ينطبق على المقارنة بين كلمات المرور. عند استخدام ==، سيتم مقارنة بين عناوين الذاكرة، مما يجعل الشرط غير صحيح دائماً. لذا يجب استخدام password.equals(inputPassword) للمقارنة بين محتوى كلمات المرور.

باستخدام هذه الطريقة الصحيحة للمقارنة، ستتمكن من تنفيذ الشروط في الكود بشكل صحيح وفقاً لتوقعاتك، وسيعمل البرنامج بشكل صحيح عند التحقق من اسم المستخدم وكلمة المرور.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر