str
एक वस्तु नहीं है, यह एक वस्तु का संदर्भ है। "Hello"
और "Help!"
दो अलग-अलग String
वस्तुएं हैं। इस प्रकार, एक स्ट्रिंग str
को इंगित करता है। आप इसे बदल सकते हैं कि यह किस ओर इंगित करता है , लेकिन ऐसा नहीं है जो इसे इंगित करता है ।
इस कोड को लें, उदाहरण के लिए:
String s1 = "Hello";
String s2 = s1;
// s1 and s2 now point at the same string - "Hello"
अब, वहाँ कुछ भी नहीं है 1 करने के लिए हम क्या कर सकता है s1
कि के मूल्य को प्रभावित करती है s2
। वे एक ही वस्तु को संदर्भित करते हैं - स्ट्रिंग "Hello"
- लेकिन वह वस्तु अपरिवर्तनीय है और इस प्रकार इसे बदला नहीं जा सकता है।
अगर हम ऐसा कुछ करते हैं:
s1 = "Help!";
System.out.println(s2); // still prints "Hello"
यहाँ हम एक वस्तु को परिवर्तित करने और एक संदर्भ को बदलने के बीच का अंतर देखते हैं। s2
अभी भी उसी वस्तु की ओर इशारा करता है जो हम शुरू में करते हैंs1
ओर इशारा में इंगित करते हैं। केवल संदर्भ में परिवर्तन s1
करने से सेटिंग होती है , जबकि मूल रूप से संदर्भित ऑब्जेक्ट अपरिवर्तित रहता है।"Help!"
String
अगर तार परस्पर थे , तो हम कुछ इस तरह कर सकते हैं:
String s1 = "Hello";
String s2 = s1;
s1.setCharAt(1, 'a'); // Fictional method that sets character at a given pos in string
System.out.println(s2); // Prints "Hallo"
ओपी के संपादन का जवाब देने के लिए संपादन करें
यदि आप String.replace (char, char) (अपने JDK इंस्टॉलेशन डायरेक्टरी में src.zip में भी उपलब्ध है ) के सोर्स कोड को देखते हैं - एक प्रो टिप वहाँ देखने के लिए है जब भी आपको आश्चर्य होता है कि वास्तव में कुछ कैसे काम करता है) तो आप देख सकते हैं कि क्या यह निम्न है:
- अगर एक या एक से अधिक घटनाएं होती हैं
oldChar
वर्तमान स्ट्रिंग में , तो वर्तमान स्ट्रिंग की एक प्रतिलिपि बनाएँ जहाँ सभी आवृत्तियों oldChar
को प्रतिस्थापित किया जाता है newChar
।
- अगर द
oldChar
वर्तमान स्ट्रिंग में मौजूद नहीं है, तो वर्तमान स्ट्रिंग लौटाएं।
तो हाँ, "Mississippi".replace('i', '!')
एक नया बनाता हैString
वस्तु । फिर, निम्नलिखित रखती है:
String s1 = "Mississippi";
String s2 = s1;
s1 = s1.replace('i', '!');
System.out.println(s1); // Prints "M!ss!ss!pp!"
System.out.println(s2); // Prints "Mississippi"
System.out.println(s1 == s2); // Prints "false" as s1 and s2 are two different objects
अब के लिए आपका होमवर्क यह देखना है कि यदि आप बदलते हैं तो उपरोक्त कोड क्या करता s1 = s1.replace('i', '!');
हैs1 = s1.replace('Q', '!');
:)
1 वास्तव में, यह है मे बदलें तार (और अन्य अपरिवर्तनीय वस्तुओं) के लिए संभव। यह प्रतिबिंब की आवश्यकता है और बहुत, बहुत खतरनाक है और कभी भी उपयोग नहीं किया जाना चाहिए जब तक कि आप वास्तव में कार्यक्रम को नष्ट करने में रुचि नहीं रखते।