2011-09-08 15 views
11
public class TestingArray { 

    public static void main(String[] args) { 

     int iCheck = 10; 
     int j = iCheck; 
     j = 11; 
     System.err.println("value of iCheck "+iCheck); 

     int[] val1 = {1,2,9,4,5,6,7}; 
     int[] val2 = val1; 
     val2[0] = 200; 
     System.err.println("Array Value "+val1[0]); 
    } 

} 

Salida:problema con la asignación de una matriz a otra matriz en java

valor de iCheck 10
matriz de valores 200

en el código anterior que encontró que si cualquier array val2 se está asignando a otra matriz val1 y si cambiamos cualquier valor de la matriz val2, el resultado también se refleja para la matriz val1, mientras que el mismo escenario no tiene asignación de variable. ¿Por qué?

Respuesta

21

la siguiente declaración hace val2 se refieren a la misma matriz como val1:

int[] val2 = val1; 

Si desea realizar una copia, se puede usar val1.clone() o Arrays.copyOf():

int[] val2 = Arrays.copyOf(val1, val1.length); 

objetos (incluidos los casos de clases de colección, String, Integer, etc.) funcionan de manera similar, en el sentido de que asignar una variable a otra simplemente copia la referencia, haciendo que ambas las variables se refieren al mismo objeto. Si el objeto en cuestión es mutable, las modificaciones posteriores realizadas a su contenido a través de una de las variables también serán visibles a través del otro.

Los tipos primitivos (int, double etc) se comportan de manera diferente: no hay referencias involucradas y la asignación hace una copia del valor.

+1

+1: O use 'int [] val2 = val1.clone();' –

3

En pocas palabras, "val1" y "val2" son punteros a la matriz real. Está asignando val2 para que apunte a la misma matriz que val1. Por lo tanto, cambie uno, y el otro ve el mismo cambio. Para que sea verdaderamente una copia, tendrías que clonar la matriz en lugar de asignarla.

1

Dado que asigna una referencia de val1 a , ambos apuntan al mismo objeto en la memoria.

1

Porque las matrices en Java son objetos, es decir, pasadas por referencia.

Cuestiones relacionadas