Ich lerne Java auf eigene Faust; und daher hat der folgende Code keine andere Funktion als zum Lernen/Testen.Java Ändern von Elementen in einer Foreach
Im Wesentlichen versuche ich, die Elemente eines Integer-Arrays zu ändern (nämlich, sie zu halbieren), während in einer foreach-Schleife.
Ich sollte beachten, dass ich Elemente nicht neu ordne, hinzufüge oder lösche; einfach ihre Werte ändern.
Hier ist mein Code:
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));
jedoch das ursprüngliche Array (intArray) ist dies:
[47, 31, 71, 76, 78, 94, 66, 47, 73, 21]
Und die Ausgabe von Copyarray ist:
[47, 31, 71, 76, 78]
So obwohl das Array wurde halbiert, die Elemente (Integer) wurden ebenfalls nicht halbiert. Was mache ich falsch?
Danke
Ich denke, das mit Autoboxing zu tun hat, also wenn Sie tun 'x/2', ist es nicht der Objektwert ändern, sondern automatisch wandelt es in ein primitives "int" um und teilt es, daher ist Ihre "Integer" -Instanz nicht betroffen. – maksimov
Also ist der Operator/= nur auf "int" -Werttypen anwendbar, und nicht auf Ganzzahlen, was die Variable "x" dazu bringt, in einen int umgewandelt zu werden? – Xenoprimate
Im Wesentlichen ist 'x = x/2' ein' x = neuer Integer (x.intValue()/2) '. Da Sie das Array nicht zurück zum Array hinzufügen, werden Ihre Array-Elemente nicht geändert. – maksimov