2010-08-30 11 views
57

CharSequence[] और String[] के बीच क्या अंतर है?CharSequence [] और एक स्ट्रिंग [] के बीच क्या अंतर है?

+0

आप जावा टैग जोड़ना चाहेंगे। या पर्याप्त प्रतिनिधि वाला कोई भी ऐसा कर सकता है। – codinguser

+4

_ प्रभावशाली जावा द्वितीय संस्करण देखें, आइटम 52: ऑब्जेक्ट्स को उनके इंटरफेस_ द्वारा संदर्भित करें। 'स्ट्रिंग' एक 'वर्ग' है, 'CharSequence' एक' इंटरफ़ेस 'है (वह' स्ट्रिंग' और कुछ अन्य लागू होते हैं)। 'CharSequence []' अधिक लचीला है। उस ने कहा, _Item 25: arrays_ को सूचियों को पसंद करें। – polygenelubricants

+1

[जावा में CharSequence वीएस स्ट्रिंग का संभावित डुप्लिकेट?] (Http://stackoverflow.com/questions/1049228/charsequence-vs-string-in-java) –

उत्तर

6

एक CharSequence एक इंटरफ़ेस है। स्ट्रिंग वर्णों का एक अपरिवर्तनीय अनुक्रम है और CharSequence इंटरफ़ेस लागू करता है। CharSequence [] और स्ट्रिंग [] क्रमशः CharSequence और स्ट्रिंग के सरणी हैं।

इसका मतलब है कि जहां भी आप CharSequence देखते हैं, आप स्ट्रिंग ऑब्जेक्ट पास कर सकते हैं।

68

StringCharSequence इंटरफ़ेस लागू करता है। CharSequence स्ट्रिंग द्वारा कार्यान्वित किया जाता है, लेकिन CharBuffer, सेगमेंट, स्ट्रिंगबफर, स्ट्रिंगबिल्डर।

तो एक स्ट्रिंग [] और एक charSequence [] अनिवार्य रूप से वही है। लेकिन CharSequence abstraction है, और स्ट्रिंग कार्यान्वयन है।

वैसे, '[]' ऑब्जेक्ट्स सर ऑब्जेक्ट्स को दर्शाता है। तो String[] तारों की एक सरणी है। और स्ट्रिंग खुद पात्रों की एक सरणी है।

+0

जावा स्ट्रिंग में वर्णों की एक सरणी नहीं है। पात्रों को एक सरणी में संग्रहीत किया जाता है, लेकिन स्ट्रिंग को अपरिवर्तनीय सुनिश्चित करने के लिए आपको कभी भी पहुंच नहीं मिलती है। –

0

CharSequence वर्णों के क्रमबद्ध सेट का प्रतिनिधित्व करता है, और इस चरित्र सेट की जांच के लिए विधियों को परिभाषित करता है। यह ineterface है, और इस इंटरफ़ेस का एक कार्यान्वयन स्ट्रिंग वर्ग है।

कृपया आगे की जानकारी के लिए जावा एपीआई दस्तावेज देखें। इसके अलावा, इस ट्यूटोरियल आप मदद कर सकते हैं: http://download.oracle.com/javase/tutorial/

+4

"वर्णों का क्रमबद्ध सेट" का अर्थ यह होगा कि वही चरित्र दो बार नहीं हो सकता है। –

+1

मुझे लगता है कि उनकी टिप्पणी केस-संवेदी होने के लिए है। उसने 'सेट' नहीं कहा, क्या उसने किया? अच्छी व्याख्या के लिए –

28

CharSequence वर्णों के क्रम के लिए एक इंटरफेस है, यह सभी वर्गों को लागू करने के लिए आम संचालन के साथ प्रतिनिधित्व करता है। हालांकि, विशेष रूप से, CharSequence इस बारे में कोई गारंटी नहीं देता है कि अनुक्रम उत्परिवर्तनीय है या नहीं। तो, आपके पास String या StringBuilder और StringBuffer जैसे एक अपरिवर्तनीय कार्यान्वयन वर्ग हो सकता है।

इसके अलावा, CharSequenceequals() या hashCode() तरीकों में से सामान्य प्रयोजन कार्यान्वयन को परिष्कृत नहीं है, इसलिए कोई गारंटी नहीं कि CharSequence को लागू विभिन्न वर्गों की वस्तुओं भले ही अंतर्निहित अनुक्रम है कि वे पकड़ में ही है बराबर होना तुलना करेंगे होती है । तो, दिया: इन तीनों के बीच

String seq1 = "hello"; 
StringBuilder seq2 = new StringBuilder("hello"); 
StringBuffer seq3 = new StringBuffer("hello"); 

तुलना .equals() जावा 1.6 पर वापसी false का उपयोग कर, लेकिन मैं किसी भी गारंटी नहीं मिल सकता है कि यह भविष्य में परिवर्तन नहीं होगा (हालांकि यह शायद काफी संभावना नहीं है)।

और CharSequence[] और String[] उनके संबंधित प्रकारों के केवल सरणी हैं।

संपादित: इस के व्यावहारिक नतीजा यह है, आप उनके toString() विधि का उपयोग करें और परिणामी String रों तुलना करने के लिए है के बाद से इस true वापस जाने के लिए अगर अंतर्निहित दृश्यों ही कर रहे हैं गारंटी है समानता के लिए CharSequence रों तुलना करने के लिए है।

+2

+1 – confucius

1

CharSequence एक इंटरफ़ेस है। स्ट्रिंग एक कक्षा है जो CharSequence इंटरफ़ेस लागू करती है। इसका मतलब है कि एक स्ट्रिंग ऑब्जेक्ट CharSequence ऑब्जेक्ट के रूप में गुजरता है। CharSequence इंटरफेस को लागू करने वाले विभिन्न वर्ग हैं। वे सभी विधियों को परिभाषित करते हैं जो विधि हस्ताक्षर (या अमूर्त तरीकों से संबंधित हैं?) कि इंटरफेस CharSequence प्रदान करता है।

0

यहाँ दिखा कैसे String कई concrete classes के एक एक CharSequenceinterface को लागू है मेरी आरेख है।

विशेष रूप से, StringBuilder आमतौर पर एक तेजी से विकल्प के रूप में + ऑपरेटर, जहां धागे की सुरक्षा की जरूरत नहीं है के साथ String वस्तुओं संयोजन किया जाता है।

वर्ग कोष्ठक एक सरणी का मतलब है। तो, String[]String ऑब्जेक्ट्स की एक सरणी है, और CharSequence[] ऑब्जेक्ट्स की एक सरणी है जो String ऑब्जेक्ट्स हो सकती है या नहीं हो सकती है लेकिन निश्चित रूप से CharSequence इंटरफ़ेस को लागू करने वाली वस्तुएं हैं।

अधिक चर्चा के लिए my Answer here और my Answer here देखें।

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