# Array in einer Methode verändern



## ProgrammierGeni (1. Feb 2008)

Hallo an alle,
ich habe folgendes Problem:
Ich möchte in der main Methode ein int Array erstellen und es dann einer Methode übergeben. In der Methode will ich einen Wert des Arrays ändern und es dann zurückgeben. Wenn ich das Array jetzt in der Methode verändere, wird auch das Array in der main Methode verwendet. Kann mir jemand sagen wo der Fehler ist?

Hier mal mein Code:

```
public static void main(String[] args) {
    int[] arr = new int[]{0,1,2};
    int[] asd = getA(arr);
  }
  static int[] getA(int[] a) {
    a[1] = 234;
    return a;
  }
```

Bitte helft mir


----------



## André Uhres (1. Feb 2008)

In Java wird nicht das Array übergeben, sondern die Referenz auf das Array. 
Mit System.arraycopy kannst du dann eine Kopie erstellen.


----------



## ProgrammierGeni (1. Feb 2008)

Hallo,
Danke für deine Antwort. Gibt es vielleicht auch eine Möglichkeit, nicht die Referenz auf das Array zu übergeben?


----------



## SlaterB (1. Feb 2008)

nein


----------



## ProgrammierGeni (1. Feb 2008)

Also ich habe es mit System.arraycopy() versucht und das funktioniert auch mit einem eindimensionalen Array. Ich habe aber ein zweidimensionales Array, dass ich kopieren will. Ich habe folgenden Code:


```
public static void main(String[] args) {
    int[][] arr = new int[][]{{0,1,2}, {3, 4, 5}};
    int[][] asd = getA(arr);
  }
  static int[][] getA(int[][] a) {
    int[][] b=new int[a.length][a[0].length];
    System.arraycopy(a, 0, b, 0, a.length);
    b[1][1] = 234;
    return a;
  }
```

Mit einem zweidimensionalen Array funktioniert es aber wieder nicht. Muss ich jedes Feld der ersten Dimension mit einer for-Schleife durchlaufen und immer System.arraycopy() aufrufen?


----------



## SlaterB (1. Feb 2008)

du könntest dir für die Kopie die Serialisierung von Java zu nutze machen:
http://www.maier-lenz.at/chlblog/2006/09/simple-java-deep-copy.html
http://www.informatik-student.de/2006/12/10/deep-copy-von-java-objekten/


----------



## André Uhres (1. Feb 2008)

ProgrammierGeni hat gesagt.:
			
		

> ..jedes Feld der ersten Dimension mit einer for-Schleife durchlaufen und immer System.arraycopy() aufrufen


Das ist eine Möglichkeit:

```
int[][] b = new int[a.length][];
for (int y = 0; y < a.length; y++) {
    b[y] = new int[a[y].length];
    System.arraycopy(a[y], 0, b[y], 0, a[y].length);
}
```


----------

