Soy nuevo en la programación y acabo de aprender sobre array. Sin embargo, en una de las preguntas del cuestionario, no puedo entender por qué mi respuesta es incorrecta. Traté de explicar mi pensamiento.
La pregunta es:
int[] b = { 1, 2, 3 }; int[] c = b; c[0] += b[2]; c[1] += b[1]; c[2] += b[0]; System.out.println(c[0] + c[1] + c[2]);Mi opinión es que, aunque la matriz es un tipo de referencia, int[] c = b aún puede tratarse como
int [] c = { 1, 2, 3 }; // the same as int [] b c[0] += b[2] means c[0] = c[0] + b[2] = 1 + 3 = 4 c[1] += b[1] means c[1] = c[1] + b[1] = 2 + 2 = 4 c[2] += b[0] means c[2] = c[2] + b[0] = 3 + 1 = 4Entonces pensé que la salida es 12. Sin embargo, la respuesta es 15.
Lamento mucho haber hecho una pregunta tan básica, pero me preguntaba si alguien me puede ayudar a entender cómo llegar a 15. ¡Muchas gracias!
en realidad, Java copia matrices por sus referencias, no por valores. entonces en la última línea de su código, b[0] se cambia a 4 entonces
c[2] += b[0] means c[2] = c[2] + b[0] = 3 + 4 = 7por lo que su salida es 15. Si desea copiar una matriz sin referencia, puede hacer esto:
int[] c = Arrays.copyOf(b, b.length);ahora, su salida debe ser 12.
La última declaración (c[2] + b[0]) generará 7 y no 4 porque b[0] se ha actualizado a 4 en la primera declaración 
entonces la salida será 4 + 4+ 7 que es 15.
Como c y b se refieren a la misma matriz, cuando c[0] se cambia a 4, significa que b[0] también es 4. Por lo tanto, el resultado de c[2] += b[0] es 3 + 4 = 7 , y la suma total de todos los elementos es 4 + 4 + 7 = 15 .
Asignando una referencia a la matriz int[] c = b; crea solo un alias y NO crea una nueva instancia de la matriz como en el caso de su copia (usando los métodos Arrays.copyOf , Arrays.copyOfRange , System.arraycopy ) o clonación int[] c = b.clone();
Dado que establece c = b , esto significa que cualquier cambio que realice en c se reflejará en b y viceversa, ya que hacen referencia a la misma matriz. Si desea que b y c sean matrices separadas, debe usar Arrays.copy() .
Para su problema, ahora podemos ir paso a paso para analizar cómo cambian los valores durante cada paso:
int[] b = { 1, 2, 3 }; int[] c = b; c[0] += b[2]; //c[0] = c[0] + b[2] = 1 + 3 = 4 //b[0] = 4 // b and c = {4, 2, 3} c[1] += b[1]; //c[1] = c[1] + b[1] = 2 + 2 = 4 //b[1] = 4 //b and c = {4, 4, 3} c[2] += b[0]; //c[2] = c[2] + b[0] = 3 + 4 = 7 //b[2] = 7 //b and c = {4, 4, 7} System.out.println(c[0] + c[1] + c[2]); //4 + 4 + 7 = 15 :)¡Espero que esto haya ayudado! Por favor, hágamelo saber si necesita más aclaraciones o detalles :)