Warum kann man das Array so befüllen?

TechPech1984  10.12.2022, 12:09

habs nochmal ergänzt . ich frag mich allerdings wo was gefüllt ist ? lottozahlen ?

jakub1999 
Fragesteller
 10.12.2022, 12:16

In lottozahlen[0],lottozahlen[1]…. Sind ja dann Werte gespeichert, ich frag mich halt warum da Werte drin sind, ich geb ja nichts zurück…

3 Antworten

Das hat mit pass-by-value und pass-by-reference zu tun. In Java werden prinzipiell Werte an Funktionen übergeben (pass-by-value). Das sieht man gut an Beispiel 2: Du schreibst zwar die Variable x als Parameter in die Funktionsklammern, eigentlich wird aber einfach der Wert "5" an die Funktion übergeben, nicht die Variable selbst. All das, was in der Funktion berechnet wird, bleibt daher in der Funktion. Du müsstest das berechnete Ergebnis daher in der Funktion zurückgeben und die Variable x dann neu zuweisen:

public static int multiplizieren(int a) {
  a = a * 6;
  return a; // Variable zurückgeben
}
public static void main(String[] args) {
  int x = 5;
  x = multiplizieren(x); // Variable mit dem oben zurückgegebenen Wert neu zuweisen
  System.out.println(x); // 30
}

Im ersten Beispiel (Array) ist es etwas anders. Zwar liegt hier in Java rein technisch betrachtet auch ein pass-by-value vor, aber unter der Haube verhält es sich wie ein pass-by-reference: Es wird also eine Objektreferenz auf das Array an die Funktion übergeben. Die Funktion bekommt daher keine Kopie des Arrays, sondern bekommt 1:1 das selbe Array (hat damit zu tun, wie Arrays bzw. generell Objekte in Java funktionieren). Alles, was die Funktion daher mit dem Array macht, kann auch die main()-Methode anschließend sehen, da das selbe Objekt bearbeitet wurde.

Woher ich das weiß:Berufserfahrung – Inhaber einer App-Agentur & 15+ Jahre Programmiererfahrung

Wenn Du ein Array an eine Funktion übergibst, handelt es sich um eine Referenz auf das ursprüngliche Array. Daher kann die Funktions den Content ändern und so implizit zurückgeben.

Wenn Du einen int an eine Funktion übergibst, handelt es sich um um eine (lokale) Kopie. Änderungen daran sind witzlos / gehen verloren.

Woher ich das weiß:eigene Erfahrung

du hast eine function intArray die durch das übergebene Array itteriert und jweils ein random wert an die stelle packt ,

du übergibst dafür in intArray(lottozahlen) ein array lottozahlen .

ich glaub durch das NEW erzeugst du nur eine Speicherplatzadresse, bzw objekt, diese gibst du dann weiter .

und dein multiplizieren übergibt zwar das x aber du hast keine rückgabe eingeplant

ergo bleibt x = 5 , da ändert sich nix

müsste eigentlich sowas wie

return a;

un beim aufruf

x = multiplizieren(x);