इसका कारण यह है कि आप भाग्यशाली हैं। जावा में ==
ऑपरेटर संदर्भ समानता के लिए जांच करता है: यदि पॉइंटर्स समान हैं तो यह सच हो जाता है। यह सामग्री समानता की जांच नहीं करता है। संकलन-समय पर पाए गए समान तार एक String
उदाहरण में ध्वस्त हो गए हैं, इसलिए यह String
अक्षरों के साथ काम करता है, लेकिन रनटाइम पर उत्पन्न तारों के साथ नहीं।
उदाहरण के लिए, "Foo" == "Foo"
काम हो सकता है, लेकिन "Foo" == new String("Foo")
नहीं होगा, क्योंकि new String("Foo")
एक नया String
उदाहरण बनाता है, और किसी भी संभव सूचक समानता टूट जाता है।
अधिक महत्वपूर्ण बात, अधिकतरStrings
आप वास्तविक दुनिया प्रोग्राम में सौदा करते हैं रनटाइम-जेनरेटेड होते हैं। टेक्स्ट बॉक्स में उपयोगकर्ता इनपुट रनटाइम-जेनरेट किया गया है। सॉकेट के माध्यम से प्राप्त संदेश रनटाइम-जनरेटेड होते हैं। फ़ाइल से पढ़ा गया सामान रनटाइम-जेनरेट किया गया है। इसलिए यह बहुत महत्वपूर्ण है कि आप equals
विधि का उपयोग करें, और ==
ऑपरेटर नहीं, यदि आप सामग्री समानता की जांच करना चाहते हैं।
String s1 = "Hello";
String s2 = "Hello";
संकलक समान स्ट्रिंग शाब्दिक पाता है और फिर ढेर बिंदु में ढेर में एक उदाहरण रखने और सभी चर बनाकर अनुकूलन कर:
मार्कोस ने आपके द्वारा जुड़े प्रश्न के उत्तर में एक [अच्छा उदाहरण] (http://stackoverflow.com/questions/767372/java-string-equals-versus/1251721#1251721) प्रदान किया। –
संबंधित: http://stackoverflow.com/questions/9698260/what-makes-reference-comparison-work-for-some-strings-in-java/9698305#9698305 – berry120