# Arraylänge beibehalten beim zuweisen



## Lord_Aratorn (30. Jul 2008)

Hey ich habe folgendes Problem. Beim zuweisen eines Arrays ändert sich leider die Länge des Ausgangsarrays nun möchte ich diese aber 100%ig beibehalten. Obwohl es vielleich Speicherfressend ist.


```
public class Arrayzuweisen{

private byte[] array = new byte[26]; //< array soll IMMER 26 byte groß sein

byte[] getarray(){
return this.array;
}

void setarray(byte[] array){
this.array = array;
}
public static void main(String[] args) {
Arrayzuweisen test = new Arrayzuweisen();
byte[] testarray = new byte[2]; //< erzeugen eines kleineren arrays
test.setarray(testarray);

System.out.println(test.getarray.length); //< Ausgabe ist 2, sollte aber 26 sein
}
}
```


----------



## Marco13 (30. Jul 2008)

Solange du nicht sagst, was GENAU du erreichen willst, kann man da keine sinnvolle Antwort geben.


----------



## FArt (30. Jul 2008)

Dann setze nicht das Array neu, sondern kopier den Inhalt in das bestehende.


----------



## Lord_Aratorn (30. Jul 2008)

Ich dachte das wir durch die Kommentare im Code klar

Ich möchte den Inhalt des übergebenen Arrays der setArraymethode im array der Klasse haben. Ohne das die Größe verändert wird.
Überschuss soll einfach abgeschnitten werden.

quasi:
array1 = 0, 0, 0
array2 = 1,2,3,4,5,6
aufruf von setarray(array2)

ergebnis array1 = 1,2,3

und vice versa


----------



## Final_Striker (30. Jul 2008)

wie schon oben gesagt, das neue array nicht zuweisen, sondern die werte des neuen in das alte kopieren und den rest z.b. mit 0 auffüllen.


----------



## SchonWiederFred (30. Jul 2008)

Lord_Aratorn hat gesagt.:
			
		

> Ich möchte den Inhalt des übergebenen Arrays der setArraymethode im array der Klasse haben. Ohne das die Größe verändert wird.
> Überschuss soll einfach abgeschnitten werden.


Es ist aber nicht erforderlich, dass dass Array in der Klasse seine Identität behält? Dann ist's ganz einfach:


```
void setarray(byte[] array)
{
	this.array = java.util.Arrays.copyOf(array, 26);
}
```


----------



## Lord_Aratorn (30. Jul 2008)

was meinst du mit identität?


----------



## SchonWiederFred (30. Jul 2008)

Lord_Aratorn hat gesagt.:
			
		

> was meinst du mit identität?


Arrays sind, genau wie Klassen, Referenztypen. Deine byte[] Variablen sind nicht selbst Arrays, sondern zeigen auf unbenannte Array-Objekte auf dem Heap. Jetzt kannst Du entweder im Array-Objekt selbst rumspielen (Identität bleibt erhalten) oder ein neues Array-Objekt erstellen (Identität bleibt nicht erhalten).

Wenn Du darauf angewiesen bist, dass es immer dasselbe Array bleibt (etwa, weil woanders im Code Dein Array von anderen Variablen referenziert wird und die sich darauf verlassen, dass das Array immer noch am alten Platz ist, immerhin gibst Du die Referenz in getarray ja für jeden zugreifbar raus), dann wird's ein bischen komplizierter:


```
void setarray(byte[] array)
{
	System.arraycopy(array, 0, this.array, 0, Math.min(array.length, 26));
	java.util.Arrays.fill(this.array, array.length, 26, (byte) 0);
}
```


----------



## SchonWiederFred (30. Jul 2008)

Zur Veranschaulichung ein bischen Code:

```
public static void main(String[] args)
{
	byte[] a = { 1, 2, 3 };
	byte[] b = a;

	b[0] = 42;
	b[1] = 47;
	b[2] = 11;
	System.out.println(a == b);

	byte[] c = { 1, 2, 3 };
	System.out.println(a == c);
}
```
Was geben die beiden printlns auf dem Bildschirm aus?


----------



## Lord_Aratorn (30. Jul 2008)

hm
true und false?


----------



## SchonWiederFred (30. Jul 2008)

Na dann hast Du es ja offenbar verstanden


----------



## Marco13 (30. Jul 2008)

Das mit der Indentität war auch das, worauf sich mein Kommentar bezog

```
....
        Arrayzuweisen test = new Arrayzuweisen();
        byte[] testarray = new byte[2];

        testArray[0] = 1234; // Setze einen Wert

        test.setArray(testarray);

        System.out.println(test.getArray()[0]); // Hier soll 1234 ausgegeben werden

        testArray[0] = 5678; // Setze einen ANDEREN Wert

        System.out.println(test.getArray()[0]); // Soll hier jetzt 1234 oder 5678 ausgegeben werden?

        test.getArray()[0] = 9999; // Setze einen ANDEREN Wert im Array der in "test" liegt

        System.out.println(testArra[0]); // Soll hier jetzt 1234 oder 5678 oder 9999 ausgegeben werden?
```
Wenn dort 5678 (oder am Ende 9999) ausgegeben werden sollte, wäre die Antwort nämlich: Das geht nicht


----------



## Lord_Aratorn (7. Aug 2008)

SchonWiederFred hat gesagt.:
			
		

> ```
> void setarray(byte[] array)
> {
> this.array = java.util.Arrays.copyOf(array, 26);
> ...


und wie mache ich das bei byte[][] ?
nehmen wir an wieder mit der größe 26.
also:

```
void setarray(byte[][] array)
{
.....
}
```


----------

