2010-09-07 14 views
8

चूंकि सी # में enum स्टैक पर हैं, मैं सोच रहा था कि जावा में, जहां बनाया गया था, enum। ढेर पर? ढेर पर? कुछ रहस्यमय अन्य जगह में?जावा का enum ... वे कहां बनाए गए हैं?

सी # में

गणन जावा में उन लोगों की तुलना में अधिक आदिम कर रहे हैं, इस कारण है कि वे ढेर पर बनाई गई हैं समझा सकती ...

वे कहाँ हैं? मैं उन्हें नहीं ढूंढ सकता!

धन्यवाद

+4

सी # * में एनम्स * स्टैक पर हो सकते हैं, लेकिन वे ढेर पर भी हो सकते हैं। यह सब निर्भर करता है कि उनका उपयोग कहाँ किया जाता है (फ़ील्ड/पैरामीटर/स्थानीय चर)। वे मूल्य प्रकार हैं हालांकि, शायद वह भ्रम कहाँ से आता है? इसके अलावा, .NET में यह कोई फर्क नहीं पड़ता कि एक चर की सामग्री कहाँ संग्रहित की जाती है; यह सिर्फ एक कार्यान्वयन विस्तार है (और सीएलआर के एक अलग कार्यान्वयन में बदल सकता है)। –

+1

जंगली जिज्ञासा से, आप क्यों जानना चाहते हैं कि वे ढेर या ढेर पर हैं या नहीं? – whaley

+1

@waley सरल जिज्ञासा – ALOToverflow

उत्तर

9

जावा में Enums भी वस्तुओं हैं: उदाहरण के लिए, enums उदाहरण चर/तरीकों/कंस्ट्रक्टर्स है और इंटरफेस को लागू कर सकते हैं। यह सब मुझे लगता है कि वे jvm द्वारा अन्य वस्तुओं की तरह संभाले जाते हैं।

+1

जिसका मतलब है ... वे ढेर पर हैं। – romacafe

6

चूंकि जावा enums extendjava.lang.Enum, वे अन्य सभी जावा ऑब्जेक्ट्स की तरह ढेर पर बनाए जाते हैं।

+1

तकनीकी रूप से, वे 'एनम' का विस्तार करते हैं। लेकिन यह वस्तुओं के रूप में उनकी स्थिति है (यानी: उनके अप्रत्यक्ष रूप से विस्तार 'ऑब्जेक्ट') जो उन्हें संदर्भ प्रकार बनाते हैं। – cHao

+0

@ 0xA3: वे 'java.lang.Enum' का विस्तार करते हैं जो स्वयं 'java.lang.Object' को बढ़ाता है। – LukeH

+0

नहीं, 0xA3, मेरा मतलब है मैंने जो कहा। मैंने पोस्ट किए गए javadocs लिंक को देखें। वे java.lang.Enum का विस्तार करते हैं, जो बदले में java.lang.Object फैलाता है। – duffymo

2

Enums जावा में ऑब्जेक्ट्स हैं, इसलिए वे ढेर पर हैं। हालांकि, प्रत्येक प्रकार के लिए उनमें से केवल एक निश्चित संख्या है। ग्राहक कोड इन enum वस्तुओं के संदर्भ संदर्भों से निपट रहा है, इसलिए वास्तव में ढेर पर कुछ भी नहीं बनाते हैं। एक विनिर्देश बिंदु से कभी भी: स्थानीय परिवर्तनीय संदर्भ ढेर पर हैं; ऑब्जेक्ट फ़ील्ड संदर्भ ढेर पर हैं।

+0

पहली वाक्य - "तो वे ढेर पर हैं" - मुझे लगता है कि आप टाइप करना चाहते हैं "तो वे ढेर पर हैं";) – serg10

+0

@ serg10 हां। वह # नहीं चाहता था। –

2

वे वस्तुएं हैं, बस किसी अन्य वस्तु की तरह, इसलिए enum ही ढेर पर है। एक चर जो एक enum का संदर्भ रखता है, वह स्टैक पर हो सकता है यदि यह एक फ़ंक्शन वैरिएबल है, या यह किसी ऑब्जेक्ट का सदस्य होने पर किसी अन्य ऑब्जेक्ट के अंदर ढेर पर हो सकता है।