1. तार की तुलना करना

यह पूरी तरह ठीक है और अच्छा है। लेकिन आप देख सकते हैं कि s1और s2तार वास्तव में समान हैं, जिसका अर्थ है कि उनमें समान पाठ है। Stringतारों की तुलना करते समय, आप प्रोग्राम को वस्तुओं के पते पर नहीं, बल्कि उनकी सामग्री पर कैसे देखते हैं ?

इसमें हमारी मदद करने के लिए, Java की Stringक्लास में equalsमेथड है। इसे कॉल करना ऐसा दिखता है:

string1.equals(string2)
दो तारों की तुलना करना

trueयदि तार समान हैं, और falseयदि वे समान नहीं हैं, तो यह विधि वापस आ जाती है ।

उदाहरण:

कोड टिप्पणी
String s1 = "Hello";
String s2 = "HELLO";
String s3 = s1.toUpperCase();

System.out.println(s1.equals(s2));
System.out.println(s1.equals(s3));
System.out.println(s2.equals(s3));
// Hello
// HELLO
// HELLO

false // They are different
false // They are different
true // They are the same, even though the addresses are different

और ज्यादा उदाहरण:

कोड व्याख्या
"Hello".equals("HELLO")
false
String s = "Hello";
"Hello".equals(s);
true
String s = "Hel";
"Hello".equals(s + "lo");
true
String s = "H";
(s + "ello").equals(s + "ello");
true


2. केस-असंवेदनशील स्ट्रिंग तुलना

पिछले उदाहरण में, आपने देखा कि तुलना का परिणाम है । दरअसल, तार बराबर नहीं हैं। लेकिन..."Hello".equals("HELLO")false

जाहिर है, तार बराबर नहीं हैं। उस ने कहा, उनकी सामग्री में समान अक्षर हैं और केवल अक्षरों के मामले में भिन्न है। क्या उनकी तुलना करने और अक्षरों के मामले को नजरअंदाज करने का कोई तरीका है? यानी कि पैदावार ?"Hello".equals("HELLO")true

और इस सवाल का जवाब हां है। जावा में, Stringप्रकार की एक और विशेष विधि है: equalsIgnoreCase. इसे कॉल करना ऐसा दिखता है:

string1.equalsIgnoreCase(string2)

विधि का नाम मोटे तौर पर तुलना के रूप में अनुवाद करता है लेकिन मामले को अनदेखा करता है । विधि के नाम के अक्षरों में दो लंबवत रेखाएं शामिल हैं: पहला लोअरकेस है L, और दूसरा अपरकेस है i। इससे आप भ्रमित न हों।

उदाहरण:

कोड टिप्पणी
String s1 = "Hello";
String s2 = "HELLO";
String s3 = s1.toUpperCase();

System.out.println(s1.equalsIgnoreCase(s2));
System.out.println(s1.equalsIgnoreCase(s3));
System.out.println(s2.equalsIgnoreCase(s3));  
// Hello
// HELLO
// HELLO

true
true
true


3. स्ट्रिंग तुलना का उदाहरण

आइए केवल एक सरल उदाहरण दें: मान लीजिए कि आपको कीबोर्ड से दो पंक्तियों को दर्ज करने और यह निर्धारित करने की आवश्यकता है कि क्या वे समान हैं। कोड इस तरह दिखेगा:

Scanner console = new Scanner(System.in);
String a = console.nextLine();
String b = console.nextLine();
String result = a.equals(b) ? "Same" : "Different";
System.out.println(result);

4. स्ट्रिंग तुलना की एक दिलचस्प बारीकियाँ

एक महत्वपूर्ण सूक्ष्मता है जिसके बारे में आपको अवगत होना चाहिए।

यदि जावा कंपाइलर आपके कोड (विशेष रूप से आपके कोड में) में कई समान स्ट्रिंग्स पाता है, तो यह मेमोरी को बचाने के लिए उनके लिए केवल एक ही ऑब्जेक्ट बनाएगा।

String text = "This is a very important message";
String message = "This is a very important message";

और परिणामस्वरूप स्मृति में क्या होगा:

स्ट्रिंग तुलना

और अगर आप text == messageयहां तुलना करते हैं, तो आपको मिलता है true। तो इससे हैरान मत होइए।

अगर किसी कारण से आपको वास्तव में संदर्भों को अलग करने की आवश्यकता है, तो आप इसे लिख सकते हैं:

String text = "This is a very important message";
String message = new String ("This is a very important message");

या यह:

String text = "This is a very important message";
String message = new String (text);

इन दोनों मामलों में, textऔर messageचर अलग-अलग वस्तुओं को इंगित करते हैं जिनमें एक ही पाठ होता है।