So, ich hab grad n Durcheinander, was die Parameterübergabe bei methoden anbelangt. Wäre da für Hilfe dankbar. Mein aktueller Wissensstand:
a) Übergebe ich einen primitiven Datentyp, dann wird der Wert kopiert und er ändert sich nur innerhalb der Methode, es ändert sich nicht der Wert der übergebenen Variable außerhalb der Methode
b) Wenn ich aber ein Array von primitiven Typen übergebe und diesem Array in der Methode neue Werte zuweise, dann habe ich das ursprüngliche Array auch verändert.
Bsp:
r hat nach Methodenaufruf die Werte 2,3,4 und nicht mehr 1,2,3
c) Wenn ich ein Objekt übergebe, gibt es zwei Möglichkeiten:
1. Ich verändere innerhalb der Methode den Wert des Objektes, was nur so geht:
übergebenesobjekte = new UrsprünglichesObjekt("anderer Parameter");
--> Hier habe ich den Wert von übergebenesobjekt mit einem neuen Objekt derselben Klasse belegt
--> Das heißt: Wert einer Objektreferenz verändern = mit nuem Objekt belegen. Das entspräche einem
bei den primitiven Typen.
2. Ich verändere direkt Eigeschaften des übergebenen Objektes. Diese sind dann dauerhaft geändert, weil ich ja über den Parameter, der den Wert der übergeben Referenz hat, auf den Original-Speicherwert zugreife.
d) Wenn ich ein Objekt-Array übergebe, dann habe ich eine Kombination aus b) und c), d. h. ich kann die Werte des Arrays neu belegen, ich kann aber auch die Eigenschaften der einzelnen, im Array gespeicherten Objekte, dauerhaft verändern.
D. h.
> bei primitiven gilt call by value. Da ich hier aber keine Eigenschaften zu verändern habe, kann ich bei primitiven nur den Wert neu belegen
> bei Referenztypen kann ich den Wert neu belegen oder ich kann auf Eigenschaften zugreifen (und sie dauerhaft verändern)
Fragen:
I) Stimmt das alles so? (Frech, ich weiß
)
II) Warum ändern sich bei dem int-Array die Werte dauerhaft?
Vielen Dank für Tipps und Erleuchtung!
a) Übergebe ich einen primitiven Datentyp, dann wird der Wert kopiert und er ändert sich nur innerhalb der Methode, es ändert sich nicht der Wert der übergebenen Variable außerhalb der Methode
b) Wenn ich aber ein Array von primitiven Typen übergebe und diesem Array in der Methode neue Werte zuweise, dann habe ich das ursprüngliche Array auch verändert.
Bsp:
Code:
int[] r = {1,2,3};
p.methodeArray(r);
for(int i=0;i < r.length;i++) {
System.out.println("R nach Methodenaufruf: "+r[i]);
}
Code:
public void methodeArray(int[] array) {
array[0] = 2;
array[1] = 3;
array[2] = 4;
for(int i=0;i < array.length;i++) {
System.out.println("R in methode: "+array[i]);
}
}
r hat nach Methodenaufruf die Werte 2,3,4 und nicht mehr 1,2,3
c) Wenn ich ein Objekt übergebe, gibt es zwei Möglichkeiten:
1. Ich verändere innerhalb der Methode den Wert des Objektes, was nur so geht:
übergebenesobjekte = new UrsprünglichesObjekt("anderer Parameter");
--> Hier habe ich den Wert von übergebenesobjekt mit einem neuen Objekt derselben Klasse belegt
--> Das heißt: Wert einer Objektreferenz verändern = mit nuem Objekt belegen. Das entspräche einem
Code:
int p = param
2. Ich verändere direkt Eigeschaften des übergebenen Objektes. Diese sind dann dauerhaft geändert, weil ich ja über den Parameter, der den Wert der übergeben Referenz hat, auf den Original-Speicherwert zugreife.
d) Wenn ich ein Objekt-Array übergebe, dann habe ich eine Kombination aus b) und c), d. h. ich kann die Werte des Arrays neu belegen, ich kann aber auch die Eigenschaften der einzelnen, im Array gespeicherten Objekte, dauerhaft verändern.
D. h.
> bei primitiven gilt call by value. Da ich hier aber keine Eigenschaften zu verändern habe, kann ich bei primitiven nur den Wert neu belegen
> bei Referenztypen kann ich den Wert neu belegen oder ich kann auf Eigenschaften zugreifen (und sie dauerhaft verändern)
Fragen:
I) Stimmt das alles so? (Frech, ich weiß
II) Warum ändern sich bei dem int-Array die Werte dauerhaft?
Vielen Dank für Tipps und Erleuchtung!