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. स्ट्रिंग तुलनेची एक मनोरंजक माहिती

एक महत्त्वाचा बारकावे आहे ज्याची तुम्हाला जाणीव असणे आवश्यक आहे.

जर Java कंपाइलरला तुमच्या कोडमध्ये (विशेषत: तुमच्या कोडमध्ये) अनेक समान स्ट्रिंग आढळल्या, तर मेमरी जतन करण्यासाठी ते त्यांच्यासाठी फक्त एकच ऑब्जेक्ट तयार करेल.

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व्हेरिएबल्स समान मजकूर असलेल्या भिन्न ऑब्जेक्ट्सकडे निर्देश करतात.