मैं अपने आप जावा सीख रहा हूं; और इसलिए नीचे दिए गए कोड में सीखने/परीक्षण के अलावा कोई कार्य नहीं है।जावा फोरैच में संशोधित तत्व
अनिवार्य रूप से मैं एक फ़ोरैच लूप में एक इंटीजर सरणी (अर्थात् उन्हें रोकना) के तत्वों को संशोधित करने का प्रयास कर रहा हूं।
मुझे ध्यान रखना चाहिए कि मैं तत्वों को पुन: क्रमबद्ध, जोड़ या हटा नहीं रहा हूं; बस अपने मूल्यों को बदल रहा है।
[47, 31, 71, 76, 78, 94, 66, 47, 73, 21]
और copyArray के उत्पादन में है:
[47, 31, 71, 76, 78]
इसलिए हालांकि
Logger.describe("Now copying half of that array in to a new array, and halving each element");
Integer[] copyArray = new Integer[DEFAULT_SAMPLE_SIZE/2];
System.arraycopy(intArray, 0, copyArray, 0, DEFAULT_SAMPLE_SIZE/2);
for (Integer x : copyArray) x /= 2;
Logger.output(Arrays.deepToString(copyArray));
हालांकि, मूल सरणी (intArray) यह है:
यहाँ मेरी कोड है सरणी आकार में आधा हो गया है, तत्वों (इंटेगर्स) को मूल्य में भी कम नहीं किया गया है। तो मैं क्या गलत हूं?
धन्यवाद
मुझे लगता है कि इस autoboxing से कोई लेना देना नहीं है, इसलिए जब आप 'कर एक्स/2', यह वस्तु के मूल्य को संशोधित नहीं है, लेकिन स्वचालित रूप से इसे एक प्राचीन 'int' में परिवर्तित करता है और इसे विभाजित करता है, इसलिए आपका' इंटीजर 'उदाहरण प्रभावित नहीं होता है। – maksimov
तो क्या/= ऑपरेटर केवल 'int' मान प्रकारों पर लागू होता है, न कि इंटीग्रर्स, जिससे 'x' चर को int में परिवर्तित किया जा सकता है? – Xenoprimate
अनिवार्य रूप से 'x = x/2' एक 'x = नया इंटीजर (x.intValue()/2)' है। इसलिए चूंकि आप इसे सरणी में वापस नहीं जोड़ रहे हैं, इसलिए आप अपने सरणी तत्वों को संशोधित नहीं कर रहे हैं। – maksimov