Java Call by Value / Call by Refernce

Eisbrecher99

Commodore
🎅Rätsel-Elite ’24
Registriert
Juli 2008
Beiträge
4.629
Code:
public class PassingParams {
	public static int x0 = 23;

	public static int compute(int x0, int x1, int x2) {
		x1 = 2 * x0;
		x0 += x2 + x1;
		x2 = x0 + x2;
		return x0++;
	}

	public static void compute(int x[]) {

		x0 += x[2] * x[1];
		x[1] = 2 * x[0];
		x[2] = x0 + x[2];
	}

	public static void compute(int x[], int x0, int x1) {

		for (x0 = 0; x0 < x1; x0++) {
			x[0] += x0;

		}
	}

	public static void main(String[] args) {

		int[] y = new int[3];
		y[0] = 4;
		y[1] = 7;
		y[2] = 2;
		System.out.println("y[1] = compute(y[0], y[1], y[2]); ");
		y[1] = compute(y[0], y[1], y[2]);

		for (int i = 0; i < y.length; ++i) {
			System.out.println(y[i]);
		} System.out.println("");
		
		System.out.println("compute(y);");
		compute(y);
		for (int i = 0; i < y.length; ++i) {
			System.out.println(y[i]);
		}System.out.println("");
		
		System.out.println("compute(y, y[0], y[1]);");
		compute(y, y[0], y[1]);
		for (int i = 0; i < y.length; ++i) {
			System.out.println(y[i]);
		}
	}
}

Hi,

ich habe hier ein kleines Verständnisproblem, und zwar:

Wenn ich in der main-Methode aufrufe:
y[1] = compute(y[0], y[1], y[2]);
Wieso dann nicht das statische x0 zur Berechnung rangezogen? Ist die Paramterübergabe eines ganzen Arrays dann Call-by-Reference?
 
Zuletzt bearbeitet:
richtig
da der formale Parameter x eine Referenz auf ein ArrayObjekt ist
per value wär ja blöd... welches Objekt wird dann genommen? nur das erste? ;)
warum übergibst du da nen Array? wenn sowieso nur das erste Element "ausgewertet" wird
mit
compute(y[0], y[1], y[2]);
übergibst du sowieso nur 1 Element für x[]

gruß

*edit meinte ArrayObjekt nicht Objekt
P.S.: jedes Array wird per Referenz übergeben, außer dein Compiler optimiert es weg...
 
Zuletzt bearbeitet:
ja, ich hab die Aufgabe nicht geschrieben... ist ein zweckmäßiges Beispiel aus ner Vorlesung ;) Halt extra so gehalten, dass man die Variablen leicht verwechselt bzw. eine Falle wenn man nicht erkennt, ob es Call by Reference oder Value ist. ;)

Edit: Aber danke... ich hab meine Denkfehler gschnallt. ;)
 
Zuletzt bearbeitet:
*edit

hier stand die Scheiße =)
Hälfte vom Quelltext nicht gesehen ...
 
Zuletzt bearbeitet:
Ich würde hier eher von Sichtbarkeitsbereichen (scopes) reden, denn von CbV, CbR...

In der Compute(x0,x1,x2) wird eben die statische x0 Variable durch den Parameter x0 überdeckt, daher wird auch nicht mit dem statischen x0 gerechnet. Dabei ist es nebensächlich ob du Call by Reference oder Call by Value hast.
 
Zurück
Oben