यह तुलना संदर्भ - जो कि दोनों चर ठीक उसी वस्तु (बल्कि सिर्फ बराबर की तुलना में) की चर्चा करते हुए कर रहे हैं।
s
और s2
विभिन्न वस्तुओं को देखें, तो अभिव्यक्ति गलत का आकलन।
s
और s1
असाइनमेंट के कारण समान ऑब्जेक्ट्स (एक दूसरे के रूप में) देखें।
s2
और s3
क्योंकि स्ट्रिंग होना शामिल की (एक दूसरे के रूप में) एक ही वस्तुओं को देखें।
यदि इससे ज्यादा मदद नहीं मिलती है, तो कृपया किसी विशेष बिट पर अधिक जानकारी मांगें। वस्तुओं और संदर्भों के साथ शुरू करने में भ्रमित हो सकता है।
ध्यान दें कि केवल स्ट्रिंग शाब्दिक डिफ़ॉल्ट रूप से प्रशिक्षु कर रहे हैं ... तो भले ही s
और s2
उल्लेख बराबर तार करने के लिए, वे अभी भी दो अलग-अलग वस्तुओं रहे हैं। इसी प्रकार यदि आप लिखते हैं:
String x = new String("foo");
String y = new String("foo");
तो x == y
झूठे का मूल्यांकन करेगा। आप बल होना शामिल, इस मामले में वास्तव में लौट सकते हैं जो होगा प्रशिक्षु शाब्दिक:
String x = new String("foo");
String y = new String("foo");
String z = "foo";
// Expressions and their values:
x == y: false
x == z: false
x.intern() == y.intern(): true
x.intern() == z: true
संपादित करें: एक टिप्पणी सुझाव दिया है कि मूल रूप से new String(String)
व्यर्थ है। वास्तव में यह मामला नहीं है।
ए String
एक ऑफसेट और लंबाई के साथ char[]
को संदर्भित करता है। आप सबस्ट्रिंग लेते हैं, यह सिर्फ एक अलग ऑफसेट और लंबाई के साथ, एक नया स्ट्रिंग हीchar[]
की चर्चा करते हुए पैदा करेगा। यदि आप एक लंबे समय के लिए एक लंबी स्ट्रिंग की एक छोटी-स्ट्रिंग रखने की जरूरत है, लेकिन लंबे स्वयं स्ट्रिंग की जरूरत नहीं है, तो यह उपयोगी new String(String)
निर्माता का उपयोग करने के लिए सिर्फ टुकड़ा आप की जरूरत की एक प्रतिलिपि बनाने के लिए, है की अनुमति देता है संग्रहित कचरा होने के लिए बड़ा char[]
।
इस का एक उदाहरण एक फ़ाइल शब्दकोश पढ़ रही है - कम शब्दों के बहुत सारे, प्रति पंक्ति एक। यदि आप BufferedReader.readLine()
का उपयोग करते हैं, तो आवंटित चार सरणी कम से कम 80 वर्ण (मानक जेडीके में, वैसे भी) होगी। इसका मतलब है कि "और" जैसे छोटे शब्द भी 160 बाइट्स + ओवरहेड्स की एक चार सरणी लेते हैं ... आप अंतरिक्ष से बहुत जल्दी से बाहर निकल सकते हैं। new String(reader.readLine())
का उपयोग दिन बचा सकता है।
स्रोत
2009-12-11 12:06:01
तारों को प्रशिक्षित नहीं किया गया है, तो यह वास्तव में सत्य का मूल्यांकन करता है? –
@ विंस्टन स्मिथ: शाब्दिक प्रशिक्षित हैं, लेकिन 's' को कन्स्ट्रक्टर कॉल का रिटर्न वैल्यू सौंपा गया है। –
@ विंस्टन: यदि वे हैं तो यह वही वस्तु होगी, लेकिन आप सवाल में इंटर्न() के लिए कहां कॉल करते हैं? – Fredrik