1. तुलना
प्रोग्रामरना नेहमी वेगवेगळ्या व्हेरिएबल्सची एकमेकांशी तुलना करणे आवश्यक असते. परंतु, जसे आपण आधीच पाहिले आहे, सर्व काही इतके सोपे नाही.
पूर्णांक तुलना करणे खूप सोपे आहे — तुम्ही फक्त वापरा ==
आणि तुमचे काम पूर्ण झाले. वास्तविक संख्यांची तुलना करण्यासाठी , तुम्हाला त्यांचा फरक (किंवा त्याऐवजी, फरकाचे परिपूर्ण मूल्य) काही अगदी लहान संख्येशी तुलना करावी लागेल.
तारांची तुलना करणे आणखी कठीण आहे. सर्वात महत्त्वाचे म्हणजे, हे असे आहे कारण स्ट्रिंग ऑब्जेक्ट्स आहेत. इतकेच काय, प्रोग्रामरना अनेकदा परिस्थितीनुसार स्ट्रिंगची तुलना थोडी वेगळी व्हावी असे वाटते.
2. स्ट्रिंगची मेमरी कशी व्यवस्थित केली जाते
तुम्ही आधीच पाहिल्याप्रमाणे, स्ट्रिंग पूर्णांक आणि वास्तविक संख्यांपेक्षा वेगळ्या पद्धतीने मेमरीमध्ये संग्रहित केल्या जातात:
स्ट्रिंग्स साठवण्यासाठी मेमरीचे दोन ब्लॉक वापरले जातात: एक ब्लॉक मजकूर स्वतः साठवतो (त्याचा आकार मजकूराच्या आकारावर अवलंबून असतो) तर दुसरा ब्लॉक (4 बाइट्स) पहिल्या ब्लॉकचा पत्ता संग्रहित करतो.
जरी एक अनुभवी प्रोग्रामर असे काहीतरी म्हणेल की " String
str
व्हेरिएबल ऑब्जेक्टचा संदर्भ संग्रहित करतो String
.
3. स्ट्रिंगला संदर्भ नियुक्त करणे
जेव्हा तुम्हाला एक स्ट्रिंग व्हेरिएबल दुसर्या स्ट्रिंग व्हेरिएबलला नियुक्त करण्याची आवश्यकता असते तेव्हा या पद्धतीचे फायदे स्पष्ट होतात. उदाहरण:
String text = "This is a very important message";
String message = text;
आणि परिणामी मेमरीमध्ये काय असेल ते येथे आहे:

या प्रकारच्या असाइनमेंट ऑपरेशननंतर, String
ऑब्जेक्ट जिथे होता तिथेच राहतो आणि फक्त त्याचा पत्ता (ऑब्जेक्टचा संदर्भ) व्हेरिएबलमध्ये कॉपी केला जातो message
.
4. संदर्भ आणि वस्तूंसह कार्य करणे
String
परंतु जर तुम्ही स्ट्रिंगला अपरकेस (कॅपिटल अक्षरे) मध्ये रूपांतरित करायचे ठरवले, तर Java मशीन सर्वकाही बरोबर करते: तुमच्याकडे दोन ऑब्जेक्ट्स असतील आणि text
आणि message
व्हेरिएबल्स संदर्भ संग्रहित करतील, प्रत्येक स्वतःच्या ऑब्जेक्टमध्ये.
उदाहरण:
String text = "This is a very important message";
String message = text.toUpperCase();
आणि परिणामी मेमरीमध्ये काय असेल ते येथे आहे:
कृपया लक्षात घ्या की ही toUpperCase()
पद्धत कॉल केलेल्या स्ट्रिंगमध्ये बदल करत नाही . त्याऐवजी, तो एक नवीन स्ट्रिंग (नवीन ऑब्जेक्ट) तयार करतो आणि त्याचा संदर्भ देतो.
आणखी मनोरंजक उदाहरण कसे आहे. समजा तुम्ही ऑब्जेक्टला स्ट्रिंग पास करण्याचे ठरवले आहे Scanner
(जेणेकरून ते स्ट्रिंगमधील मूल्ये वाचेल).
उदाहरण:
String text = "10 20 40 80";
Scanner console = new Scanner(text);
int a = console.nextInt();
int b = console.nextInt();
Scanner
वर्ग कसा चालतो याबद्दल तुम्ही येथे अधिक जाणून घेऊ शकता .
हे सर्व मेमरीमध्ये कसे संग्रहित केले जाईल:
या प्रकरणात, एकच String
वस्तू जशी होती तशीच मेमरीमध्ये राहते - फक्त त्याचे संदर्भ दिले जातात आणि व्हेरिएबल्समध्ये साठवले जातात.
String
5. वस्तूंच्या संदर्भांची तुलना करणे
आणि शेवटी, आम्ही मजेशीर भागावर पोहोचलो आहोत: स्ट्रिंग तुलना.
स्ट्रिंग व्हेरिएबल्सची तुलना करण्यासाठी तुम्ही दोन ऑपरेटर वापरू शकता: ==
(समान) आणि !=
(समान नाही). तुम्ही "त्यापेक्षा मोठे", "पेक्षा कमी", किंवा "त्यापेक्षा मोठे किंवा समान" ऑपरेटर वापरू शकत नाही - कंपाइलर त्यास परवानगी देणार नाही.
परंतु येथे एक मनोरंजक सूक्ष्मता आहे: स्ट्रिंग व्हेरिएबल्समध्ये खरोखर काय साठवले जाते? ते बरोबर आहे: वस्तूंचे पत्ते (संदर्भ). आणि या पत्त्यांची तुलना केली जाईल:
String text = "Hi";
String message = text;
String s1 = text.toUpperCase();
String s2 = text.toUpperCase();
मेमरीमध्ये काय असेल ते येथे आहे:
message
आणि व्हेरिएबल्स text
एकाच ऑब्जेक्टचा संदर्भ घेतात (त्याचा पत्ता संग्रहित करतात). परंतु s1
आणि s2
व्हेरिएबल्स वस्तूंचे संदर्भ संग्रहित करतात जे खूप समान आहेत परंतु भिन्न आहेत.
आणि जर तुम्ही कोडमधील या 4 व्हेरिएबल्सची तुलना केली तर तुम्हाला खालील परिणाम मिळेल:
कोड | कन्सोल आउटपुट |
---|---|
|
|
GO TO FULL VERSION