Estoy aprendiendo Java por mi cuenta; y, por lo tanto, el siguiente código no tiene otra función que no sea para aprender/probar.Elementos modificadores de Java en un foreach
Básicamente, estoy tratando de modificar los elementos de una matriz de enteros (es decir, reduciéndolos a la mitad) mientras estoy en un bucle foreach.
Debo notar que no estoy reordenando, agregando o eliminando elementos; simplemente cambiando sus valores.
Aquí está mi código:
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));
Sin embargo, la matriz original (intArray) es la siguiente:
[47, 31, 71, 76, 78, 94, 66, 47, 73, 21]
Y la salida de copyArray es:
[47, 31, 71, 76, 78]
Así que, aunque la matriz se ha reducido a la mitad en tamaño, los elementos (enteros) no se han reducido a la mitad en valor. Entonces, ¿qué estoy haciendo mal?
Gracias
Creo que esto tiene que ver con autoboxing, así que cuando lo hace 'x/2', no se modifica el valor del objeto, pero de forma automática lo convierte en un 'int' primitivo y lo divide, por lo tanto, su instancia' Integer' no se ve afectada. – maksimov
Entonces, ¿el operador/= solo se aplica a los tipos de valores 'int', y no a los enteros, lo que hace que la variable 'x' se convierta en un int? – Xenoprimate
Esencialmente 'x = x/2' es un' x = nuevo entero (x.intValue()/2) '. Entonces, como no lo está agregando de nuevo a la matriz, no está modificando los elementos de la matriz. – maksimov