2016-03-20 10 views
5

पर मान निर्दिष्ट करने के लिए काम नहीं कर रहा है, मुझे समझ में नहीं आ रहा है कि मैं लूप के लिए बढ़ाए गए सरणी के तत्वों को मान निर्दिष्ट क्यों नहीं कर सकता। उदाहरण के लिए, किलूप के लिए उन्नत एक सरणी (जावा)

int[] array = new int[5]; 
    for(int i = 0; i < 5; i++) 
     array[i] = 10; 

तरह पाश के लिए उपयोग कर पैदा करता है कि मैं क्या चाहता हूँ। लेकिन क्यों है कि "प्रत्येक के लिए" के साथ काम नहीं करता है:

for(int element : array) 
     element = 10; 

कोई विशिष्ट कारण यह मामला है या मैंने कुछ गलत कर रहा हूँ?

उत्तर

8

पाश element के लिए बढ़ाया में सरणी या Iterable तुम पर पुनरावृत्ति कर रहे हैं की वर्तमान तत्व के लिए संदर्भ (या पुरातन के मामले में मूल्य) से युक्त एक स्थानीय चर रहा है।

इसे सौंपने से सरणी/Iterable प्रभावित नहीं होती है।

int[] array = new int[5]; 
for(int i = 0; i < 5; i++) { 
    int element = array[i]; 
    element = 10; 
} 

कौन सा भी सरणी में बदलाव नहीं करेगी:

यह के बराबर है।

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

0

पाश के लिए बढ़ाया आप का उपयोग करें:

for(int element : array) 
    element = 10; 
  1. जावा में हम एक वस्तु को संदर्भित संदर्भ है। एक समय में एक संदर्भ केवल एक वस्तु का संदर्भ दे सकता है। यदि यह किसी अन्य ऑब्जेक्ट को संदर्भित करने के लिए बनाया गया है तो यह पिछले के संदर्भ को नुकसान पहुंचाता है। जब आप = का उपयोग तो आपको एक और मूल्य यानी 10.

  2. यहाँ elementtype int, जो primitive प्रकार है की है संदर्भित करने के लिए element बनाते हैं। भले ही यह Integer था तो Integerimmutable होने पर आप ऑब्जेक्ट में संशोधनों के रूप में किसी भी संशोधन को करने में सक्षम नहीं हुए हैं, हमेशा एक अलग ऑब्जेक्ट का परिणाम होता।

यह कुछ कस्टम वर्ग के लिए नीचे के रूप में मामला हो गया होता, तो कहते हैं कि Student.java कुछ List<Student> students.

for(Student std : students){ 
    std.setName("eureka"); 
} 

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

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