दिलचस्प पोस्ट
दो फाइलों की तुलना करें अजगर में अंतर की रिपोर्ट करें मेलटो प्रोटोकॉल प्रोग्रामेटिक रूप से विंडोज प्रोग्राम को पंजीकृत करें "यादृच्छिकता" को समझना नोडजेएस अनुप्रयोगों का सुरक्षित वितरण PHP सरणी के प्रत्येक आइटम के लिए एक उपसर्ग जोड़ें स्ट्रीम दो बार पढ़ें "सज्जाकार" क्या हैं और उनका उपयोग कैसे किया जाता है? एसवीजी का इस्तेमाल करते हुए वेब पेज पर लिखावट का पाठ कैसे बदलना है? एक नियंत्रक में पैरामीटर से एक Grails तिथि बाध्यकारी क्रोम एक्सटेंशन में एक छवि डालें सी में एक स्टैक ट्रेस कैसे पकड़ सकता है? IList <string> या IEnumerable <string> से अल्पविराम से अलग सूची बनाना अलगाव से बचने के लिए, डबल कोट्स के भीतर, awk में पायथन में एसएफटीपी? (स्वतंत्र मंच) सी # में वर्तमान निष्पादन योग्य का नाम कैसे प्राप्त करूं?

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 सेट कर रहा है, जिसका मतलब होगा कि मुझे सरणी के माध्यम से लूप नहीं करना चाहिए और इसे आरंभ करना है?

धन्यवाद।

वेब के समाधान से एकत्रित समाधान "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 से उद्धरण "जब यह बनाया जाता है तो सरणी घटक एक डिफ़ॉल्ट मान के साथ आरंभ होता है"

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