2016-12-25 7 views
3

Ich las über das Kopieren von Arrays von Referenzen.Kopieren von Arrays von Referenzen

Object[] obj1 = {new Integer(11), 
        new StringBuffer("foobar"), 
        new Double(12.95)}; 

    Object[] obj2 = new Object[obj1.length]; 
    for(int i = 0; i < obj1.length; i ++) 
     obj2[i] = obj1[i]; 

    //this change to obj1 does NOT effect obj2. 
    obj1[0] = new Integer(5); 

    System.out.println(Arrays.toString(obj1)); 
    System.out.println(Arrays.toString(obj2)); 
    System.out.println(); 


    //this change to obj1 DOES effect obj2 
    ((StringBuffer) obj1[1]).append('s'); 

    System.out.println(Arrays.toString(obj1)); 
    System.out.println(Arrays.toString(obj2)); 

sowohl die Arrays auf gleiche Elemente zeigen, sondern zu verändern Element das zweite Array ändern mich in der 2. Fall nicht in der ersten case.Can jemand erklären, warum es nicht zweiten Array ändern in ersten Fall.

Antwort

2
obj1[0] = new Integer(5); 

Hier können Sie einen Verweis auf ein neues Objekt mit dem ersten Index eines der Arrays zuweisen, so dass der erste Index des anderen Array auf ein anderes Objekt Bezug hält und ist nicht betroffen.

((StringBuffer) obj1[1]).append('s'); 

Hier können Sie den Zustand des Objekts verändern sich durch obj1[1] verwiesen, die das gleiche Objekt ist durch obj2[1] verwiesen. Daher sind beide Arrays betroffen.

1

In diesem ersten Fall ändern Sie dasselbe Objekt (durch Aufruf der Methode append). In der zweiten ersetzen Sie eine Referenz durch eine andere Referenz. Das ursprüngliche Array zeigt immer noch auf die ursprüngliche Referenz und bleibt daher unverändert.

1

Hier

obj1[0] = new Integer(5); 

Sie das durch das erste Element von obj1 referenzierte Objekt ändern.
Das Ändern des Objekts, auf das von einem Verweis verwiesen wird, gilt nicht für andere Verweise, die auf dieses Objekt verwiesen haben. Also, das erste Element von zwei Arrays verweist nicht mehr auf dasselbe Objekt.

hier:

((StringBuffer) obj1[1]).append('s'); 

Das erste Element der beiden Arrays Referenzen immer das gleiche Objekt. Sie haben den Inhalt des referenzierten Objekts geändert. Alle Referenzen zu diesem Objekt sehen also die Änderung.

Verwandte Themen