2010-01-20 16 views
31

जावा के पास स्ट्रिंग के लिए आदिम प्रकार क्यों नहीं है जब अधिकांश अन्य डेटा प्रकार करते हैं?स्ट्रिंग के लिए कोई आदिम प्रकार क्यों नहीं है?

+5

उह। काश आप सभी के साथ ईमानदार होने के लिए कोई प्राइमेटिव नहीं थे। – CookieOfFortune

+0

असल में वही प्रश्न जो आपने यहां पूछा था: http://stackoverflow.com/questions/2099171/integer-as-primitve-type – David

+0

क्या आपका वास्तव में मतलब था, प्राचीन प्रकार के बजाय स्ट्रिंग के लिए "मूल्य-प्रकार" ऑब्जेक्ट क्यों नहीं है ? (यानी आप ढेर बनाम ढेर पर एक स्ट्रिंग कैसे डालते हैं?) – BrainSlugs83

उत्तर

48

स्ट्रिंग एक वस्तु है, यह बिल्कुल एक प्राचीन प्रकार नहीं है, केवल वर्णों की एक सरणी है।

बिल वेनर्स: कारण है कि आदिम प्रकार सब पर जावा में मौजूद एक दिलचस्प एक है, a James Gosling interview से अंश है क्यों जावा में आदिम प्रकार के होते हैं? सब कुछ क्यों एक वस्तु नहीं थी?

जेम्स गोस्लिंग: पूरी तरह से एक दक्षता बात। सभी प्रकार के लोग हैं जिन्होंने सिस्टम बनाया है जहां इन्ट्स और सभी ऑब्जेक्ट्स हैं। ऐसा करने के लिए विविध तरीके हैं, और के सभी में उनके पास कुछ गंभीर गंभीर समस्याएं हैं। उनमें से कुछ धीमे हैं, क्योंकि वे सब कुछ के लिए स्मृति आवंटित करते हैं। उनमें से कुछ ऑब्जेक्ट्स करने का प्रयास करते हैं, जहां कभी-कभी वे ऑब्जेक्ट्स होते हैं, कभी-कभी वे नहीं होते हैं ( मानक LISP सिस्टम क्या होता है), और फिर चीजें वास्तव में अजीब होती हैं। यह काम करता है, लेकिन यह अजीब है।

बस इसे ऐसा बनाते हुए कि आदिम और वस्तुएं हैं, और वे बिल्कुल अलग हैं। आप पूरी तरह से समस्याओं का समाधान करते हैं।

तो संक्षेप में प्राचीन प्रकार दक्षता कारणों के लिए मौजूद हैं।

+26

+1 - और अनुशासन यह है कि स्ट्रिंग आदिम नहीं है क्योंकि यह इसे आदिम बना देता है, यह इसे और अधिक कुशल नहीं बनायेगा। –

+1

वास्तव में आदिम प्रकारों का एक बहुत अच्छा कारण है! यह सुनिश्चित करता है कि बर्बाद कीमती सेकंड (लगभग 10) को एक उदाहरण 'इंटीजर foo = new Integer (aValueFoo) बनाने के बजाय केवल int बनाने के लिए समय बचाता है; '। 'इंटीजर फू इंटीजर फू इंटीजर फू इंटीजर फू' देखने के लिए गन्दा हो जाएगा ... 'मेरी राय में अपना कोड अस्तर। पूर्णांक के साथ करने के लिए बड़ी चीजों की बात आती है जब इंटीजर का उपयोग होता है ... primitives एक आशीर्वाद है! –

5

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

मुझे यह कहना चाहिए कि कुछ लोग स्ट्रिंग को "आदिम" मान सकते हैं क्योंकि यह अंतर्निहित है। लेकिन यह एक समग्र प्रकार के विपरीत मूल प्रकार होने के अर्थ में आदिम नहीं है। चूंकि एक स्ट्रिंग वर्णों की एक सरणी है, यह एक समग्र प्रकार है।

+0

क्या कोई भाषा इसे आदिम मानती है? क्या स्मृति में निश्चित लंबाई एक होने का कारण बनती है? – Jeff

+0

अजीब रूप से पर्याप्त, जावास्क्रिप्ट स्ट्रिंग में आदिम है। इसमें स्मृति की लंबाई तय हो सकती है क्योंकि यह अपरिवर्तनीय है। –

13

int, char, float, double, आदि सभी की स्मृति में निश्चित लंबाई है। जैसे एक int में 4 बाइट होते हैं, इस प्रकार 32 बिट्स।

लेकिन एक स्ट्रिंग में अलग-अलग लंबाई हो सकती है, यह वास्तव में चार की सरणी है।

+1

ठीक है, यह कहने का एक कारण है कि यह ऑब्जेक्ट-प्रकार (यानी एक वर्ग) क्यों होना चाहिए, न कि मूल्य-प्रकार (यानी एक संरचना) - सवाल यह है कि यह आदिम क्यों नहीं है? जावा में सभी प्राइमेटिव्स वैल्यू टाइप हैं? - जावा में कोई structs नहीं हैं? – BrainSlugs83

+1

केवल तार्किक उत्तर सीधे प्रश्न पर मिला: स्मृति आवंटन के मुद्दों के कारण। एक int या एक फ्लोट प्रकार के लिए एक विशिष्ट मेमोरी आकार की आवश्यकता होती है, लेकिन एक स्ट्रिंग (माफ करना, स्ट्रिंग) स्मृति की लंबाई (अनिश्चित समय पर) की एक चर लंबाई से बना है। अवधि। आपको बहुत - बहुत धन्यवाद! – user3285866

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