2011-06-24 11 views
7

मेरी राय आज तक थी, कि "c" जैसे शाब्दिक String ऑब्जेक्ट बनाता है। आज मैंने सुना है कि जावा एकल चरित्र तारों के लिए एक वस्तु नहीं बना रहा है। क्या यह सही है? क्या यह उस शाब्दिक को char के रूप में संग्रहीत करता है?सिंगल कैरेक्टर स्ट्रिंग

+3

सुना? सुनो कहाँ? – bmargulies

+0

यह एक सिंगल-कैरेक्टर स्ट्रिंग के ऑटो-मुक्केबाजी/अनबॉक्सिंग की एक दिलचस्प अवधारणा होगी जो 'char' ... – Nick

+0

उस व्यक्ति को बताएं जो आपको बताती है कि जावा भाषा विशिष्टता में अक्षर के बारे में हिस्सा पढ़ने के लिए। कैरेक्टर लिटलल्स और स्ट्रिंग लिटलल्स: http://java.sun.com/docs/books/jls/second_edition/html/lexical.doc.html#100960 –

उत्तर

5

"c"String शाब्दिक है। यह String का प्रतिनिधित्व करता है जैसे "foo"String का प्रतिनिधित्व करता है।

एकल चरित्र String शाब्दिक का कोई विशेष हैंडलिंग (यहां तक ​​कि 0 अक्षर String शाब्दिक "" की नहीं) नहीं है।

जो भी आपको बताता है कि इसका अलग-अलग व्यवहार किया गया था।) गलत या बी।) कुछ अलग बात करने के बारे में बात करते हैं (उदाहरण के लिए एक विशेष पुस्तकालय जिसमें एक पुस्तकालय है)।

8

"c" एक स्ट्रिंग बनाएगा। 'c' एक char

13

कोई भी गलत नहीं होगा। यहां तक ​​कि "", String ऑब्जेक्ट बनाता है। हालांकि यदि आप 'c' टाइप करते हैं, तो आपको एक char मिला है और String ऑब्जेक्ट नहीं है।

6

जावा एक वर्ण स्ट्रिंग के लिए भी एक स्ट्रिंग का उदाहरण बनाता है। निम्नलिखित प्रिंट java.lang.String:

public class Test{ 
    public static void main(final String[] args){ 
     System.out.println("c".getClass().getName()); 
    } 
} 
+0

हाँ यह स्पष्ट रूप से रिटर्न स्ट्रिंग करता है क्योंकि '" "(डबल कोट्स) है तारों के लिए और '' '' (एकल उद्धरण) वर्णों के लिए – Woot4Moo

1

"c" एक वस्तु पैदा करता है। हालांकि, अगर आप स्रोत कोड में कहीं भी शाब्दिक रूप से असाइन करते हैं, तो यह एक नई वस्तु नहीं बनाएगा, लेकिन बनाए गए पहले स्ट्रिंग ऑब्जेक्ट को संदर्भित करेगा।

उदाहरण के लिए:

String s1 = "abc"; //creates the String object 
String s2 = "abc"; //references the same object as s1 

दोनों एस 1 और एस 2 एक ही वस्तु आवंटित कर रहे हैं, और == काम करेगा।

आप यहाँ और अधिक पढ़ सकते हैं: http://javatechniques.com/blog/string-equality-and-interning/

+0

गलत है। == केवल तभी काम करेगा यदि आपने String.intern – Woot4Moo

+0

@ Woot4Moo no का उपयोग किया है, यह सच है। शाब्दिक तारों को डिफ़ॉल्ट रूप से प्रशिक्षित किया जाता है। – sfussenegger

+0

@ Woot4Moo https://gist.github.com/1044768 – sfussenegger

1

हो सकता है कि क्या मतलब था कि हुड के नीचे flyweights बनाई गई हैं था (यह पता नहीं कैसे जावा के साथ काम करता है, लेकिन मुझे लगता है कि इस अवधारणा को तार के लिए कुछ स्तर पर employeed है) एक char[] रूप

+0

यह कुछ परिचालनों के लिए सच है, अर्थात् substring (..), subSequence (..) और trim(), जहां परिणामस्वरूप स्ट्रिंग हुड के नीचे एक ही char [] का उपयोग करेगा। मैं नहीं देखता कि यह स्ट्रिंग अक्षर को कैसे प्रभावित कर सकता है। – sfussenegger

0

String भंडार वर्ण, तो सबसे अधिक संभावना "c"new char[] { 'c' }String वस्तु के भीतर के रूप में प्रतिनिधित्व किया जाएगा।

String कक्षा final है, इसका मतलब है कि कोई char c फ़ील्ड में एकल-वर्ण तारों को संग्रहीत करने वाला कोई सबक्लास नहीं है।

इसके अलावा, ऑटो मुक्केबाजी की कोई अवधारणा नहीं है/एक एकल चरित्र Stringchar करने के लिए unboxing - जहाँ तक के रूप में यह दर्ज है, तो यह एकल चरित्र स्ट्रिंग्स ग्रहण करने के लिए सुरक्षित है किसी भी अन्य प्रकार के समान जमा हो जाती है स्ट्रिंग का

0

प्रोग्रामिंग में अधिकांश चीजों के साथ स्रोत -> java.lang.String पर देखें।

सभी स्ट्रिंग java.lang के उदाहरण हैं। स्ट्रिंग का कोई विशेष मामला नहीं है। प्रत्येक और प्रत्येक java.lang.String में एक char [] और कुछ पूर्णांक शामिल होते हैं जो प्रारंभ और अंत अनुक्रमणिका को पकड़ते हैं।ध्यान दें कि char [] को स्ट्रिन उदाहरणों के बीच साझा किया जाता है जैसे कि जब कोई स्ट्रिंग.substring() मूल char [] को क्लोन या कॉपी नहीं किया जाता है, तो इसे साझा किया जाता है लेकिन स्टार्ट/एंड इंडेक्स अपडेट होते हैं।

संबंधित मुद्दे