दिलचस्प पोस्ट
जेवीएम हीप मापदंडों कौन सा क्रिप्टोग्राफिक हैश फ़ंक्शन मुझे चुनना चाहिए? गैर-पुनरावर्ती अप्राक्रोच के साथ ग्राफ़ की गहराई से पहली खोज कैसे लागू करें AnkhSVN बनाम विजुअलएसवीएन ओरेकल में मिलीसेकंड में दो टाइमस्टैम्प के बीच अंतर की गणना करना आईओएस 8 का प्रयोग करते हुए एक यूआईएलएरट्रंट्रोलर को ठीक से पेश करते हुए क्या <fieldset> टैग का उपयोग किए बिना एक <fieldset> -like प्रभाव प्राप्त करना संभव है? पीएचपी कम खुले टैग को <? Php के साथ बदलने के लिए बैच स्क्रिप्ट परंपरागत एन-स्तरीय डिजाइन में कई परियोजनाओं के साथ जीआईटी रिपॉजिटरीज के लिए सर्वश्रेष्ठ अभ्यास `से … आयात करें 'बनाम आयात करें। निरंतर मूल्य प्रकार बनाने में असमर्थ केवल इस प्रकार के आदिम प्रकार या गणण प्रकार इस संदर्भ में समर्थित हैं वर्तमान में जेयूनिट 4 में परीक्षण निष्पादित करने का नाम प्राप्त करें फ़ील्ड द्वारा PHP क्रमबद्ध सरणी? जावास्क्रिप्ट में सीएसएस प्रॉपर्टी सेट करें? कैसे MySQL में संबंध बनाने के लिए

Java में एक सरणी का डिफ़ॉल्ट आरम्भिकरण क्या है?

इसलिए मैं एक int सरणी को घोषित और प्रारंभ कर रहा हूं:

static final int UN = 0; int[] arr = new int[size]; for (int i = 0; i < size; i++) { arr[i] = UN; } 

कहो मैं इसके बजाय …

 int[] arr = new int[5]; System.out.println(arr[0]); 

0 मानक से बाहर प्रिंट होगा इसके अलावा, अगर मैं ऐसा करता हूं:

 static final int UN = 0; int[] arr = new int[5]; System.out.println(arr[0]==UN); 

… मानक को मानक से प्रिंट किया जाएगा तो जावा डिफ़ॉल्ट रूप से मेरी सरणी कैसे आरंभ कर रहा है? यह मानना ​​सुरक्षित है कि डिफ़ॉल्ट आरंभीकरण सरणी सूचकांक 0 सेट कर रहा है, जिसका मतलब होगा कि मुझे सरणी के माध्यम से लूप नहीं करना चाहिए और इसे आरंभ करना है?

धन्यवाद।

Solutions Collecting From Web of "Java में एक सरणी का डिफ़ॉल्ट आरम्भिकरण क्या है?"

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

  • संदर्भों के लिए (किसी वस्तु को धारण करने वाली वस्तु) जो null
  • Int / short / बाइट / लम्बी के लिए यह 0 है
  • फ्लोट / डबल के लिए जो 0.0 है
  • बूलियन के लिए जो गलत है
  • चारों के लिए यह रिक्त वर्ण '\ u0000' है (जिसका दशमलव समतुल्य है 0)।

जब आप कुछ की एक सरणी बनाते हैं, तो सभी प्रविष्टियों को भी शून्य कर दिया जाता है। तो आपके सरणी में पांच शून्य होते हैं, उसके बाद इसे new बनाया जाता है

नोट (टिप्पणियों के आधार पर): जावा वर्चुअल मशीन को स्थानीय चर को आवंटित करते समय अंतर्निहित स्मृति को शून्य करने के लिए आवश्यक नहीं है ताकि जावा भाषा विशिष्टता उन्हें आरंभ करने की आवश्यकता हो।

जावा भाषा विशिष्टता से :

  • प्रत्येक वर्ग चर, इंस्टेंस चर, या सरणी घटक को मूल मान के साथ आरम्भ किया जाता है जब इसे बनाया जाता है (§15.9, §15.10):

    • प्रकार बाइट के लिए, डिफ़ॉल्ट मान शून्य है, अर्थात, (byte)0 का मान
    • संक्षिप्त प्रकार के लिए, डिफ़ॉल्ट मान शून्य है, अर्थात, (short)0 का मान
    • प्रकार int के लिए, डिफ़ॉल्ट मान शून्य है, वह है, 0
    • लंबे प्रकार के लिए, डिफ़ॉल्ट मान शून्य है, अर्थात, 0L
    • टाइप फ्लोट के लिए, डिफ़ॉल्ट मान पॉजिटिव शून्य है, अर्थात 0.0f
    • टाइप डबल के लिए, डिफ़ॉल्ट मान पॉजिटिव शून्य है, 0.0d
    • टाइप चार के लिए, डिफ़ॉल्ट मान रिक्त वर्ण है, अर्थात, '\u0000'
    • टाइप बूलियन के लिए, डिफ़ॉल्ट मान false
    • सभी संदर्भ प्रकारों (§4.3) के लिए, डिफ़ॉल्ट मान null

जेएलएस स्पष्ट रूप से कहते हैं

एक सरणी initializer एक सरणी बनाता है और उसके सभी घटकों के लिए प्रारंभिक मान प्रदान करता है।

और यह चाहे चाहे सरणी एक उदाहरण चर या स्थानीय चर या वर्ग चर है

आदिम प्रकारों के लिए डिफ़ॉल्ट मान: दस्तावेज़

वस्तुओं के लिए डिफ़ॉल्ट मान null

जावा के अनुसार,

डेटा प्रकार – डिफ़ॉल्ट मान

बाइट – 0

छोटा – 0

इंट – 0

लंबे – 0 एल

फ्लोट – 0.0 एफ

डबल – 0.0 डी

चार – '\ u0000'

स्ट्रिंग (या कोई ऑब्जेक्ट) – रिक्त

बूलियन – गलत

जावा का कहना है कि आरम्भिकरण के समय जावा ऐरे की डिफ़ॉल्ट लंबाई 10 होगी।

 private static final int DEFAULT_CAPACITY = 10; 

लेकिन size() विधि सरणी में सम्मिलित किए गए तत्वों की संख्या देता है, और प्रारंभ होने के समय से, अगर आपने सरणी में कोई तत्व सम्मिलित नहीं किया है, तो यह शून्य वापस करेगा।

 private int size; public boolean add(E e) { ensureCapacityInternal(size + 1); // Increments modCount!! elementData[size++] = e; return true; } public void add(int index, E element) { rangeCheckForAdd(index); ensureCapacityInternal(size + 1); // Increments modCount!! System.arraycopy(elementData, index, elementData, index + 1,size - index); elementData[index] = element; size++; } 

जावा में हर कक्षा में एक कन्स्ट्रक्टर है (ए कन्स्ट्रक्टर एक ऐसा तरीका है जिसे एक नया ऑब्जेक्ट बनाया जाता है, जो क्लास चर के क्षेत्र को आरम्भ करता है) कहा जाता है। इसलिए जब आप क्लास का एक उदाहरण बना रहे हैं, ऑब्जेक्ट बनाने के दौरान कन्स्ट्रक्टर विधि को कहा जाता है और उस समय सभी डेटा वैल्यू प्रारंभ हो जाते हैं।

पूर्णांक सरणी प्रकार के ऑब्जेक्ट के लिए सरणी में सभी मान 0 (शून्य) के लिए कन्स्ट्रक्टर विधि में आरंभ किए जाते हैं। इसी प्रकार बुलियन सरणी के ऑब्जेक्ट के लिए, सभी मान झूठे के लिए आरंभ किए जाते हैं।

तो जावा ऑब्जेक्ट बनाने के दौरान इसे कंस्ट्रक्टर विधि चलाकर सरणी को इनिशियलाइज़ कर रहा है

थोरबजर्न रावन एंडर्सन ने अधिकांश डेटा प्रकारों के लिए उत्तर दिया चूंकि सरणी के बारे में एक गर्म चर्चा हुई थी,

Jls spec http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.5 से उद्धरण "जब यह बनाया जाता है तो सरणी घटक एक डिफ़ॉल्ट मान के साथ आरंभ होता है"

मुझे लगता है कि चाहे सरणी स्थानीय या उदाहरण या वर्ग चर है, यह डिफ़ॉल्ट मानों के साथ होगा