[Erledigt] Parameter verändert Variable

Hi,

habe eine Frage zu diesem Bespiel:

public class Auswertung {

	public static void main(String[] args) {
		int aktuell = 1;
		
		methode(aktuell++,aktuell);
		System.out.println("Nach Methodenaufruf:");
		System.out.println("Wert von aktuell : "+aktuell);
	}
	
	public static void methode(int formalA, int formalB) {
		System.out.println("Innerhalb von Methode:");
		System.out.println("Wert von formalA: "+formalA);
		System.out.println("Wert von formalB: "+formalB);
	}
}```


Innerhalb von Methode:
Wert von formalA: 1
Wert von formalB: 2
Nach Methodenaufruf:
Wert von aktuell : 2


Warum verändert sich der Wert von der Variable **aktuell**? Ich übergebe diese Variable als Parameter an die Methode **methode,** wieso hat das Auswirkung auf die Variable selbst?

weil du aktuell++ machst :wink:
das ändert die Variable;)

Hehe, also das ist mir schon klar, dass ich mit ++ den Wert um 1 erhöhen kann, jedoch sollte das nicht auf die Methode nur Auswirkung haben und nicht auf die Variable selbst? Ich dachte, wenn ich als Parameter etwas übergebe, z.B. (a + 1), dann ändere ich damit nur den formalen Parameter und der Wert von der Variablen a bleibt gleich. Scheint aber anders zu sein :).

wieso? du übergibst der Methode den Inhalt der Variablen und da du die Variable geändert hast ist das was anderes drin :wink:

Wenn ich folgendes schreibe: methode(aktuell++,aktuell); dann ändere ich damit die Variable aktuell. Wenn ich aber stattdessen (aktuell, aktuell+1) schreibe, dann ändert sich der Wert von aktuell nicht. Warum?

du kannst das so sehen als würde bei methode(a,a) immer genau a übergeben wird
bei methode(a,a+1) wird aber int tempa = a+1; methode(a,tempa) gemacht
und bei methode(a,a++) wird int b=a; a = a+1; methode(b,a);

kurz gesagt es wird eine temporäre Variable bei a+1 erzeugt aber a++ wird es gleich in a geschrieben

Alles klar, danke :D.

Das ++ erhöht die Variable um 1, wann dies geschieht ist aber abhängig davon, wo das ++ steht!

++a != a++

Wenn wir deine Ausgabe beobachten, sehen wir, dass die Variable Aktuell zuerst sehr wohl noch den Wert 1 hatte und erst bei der zweiten Ausgabe den Wert 2.

Dies Passiert, weil a++ den Wert der Variablen an die Funktion übergibt und ihn erst danach um 1 erhöht. ++a erhöht zuerst und übergibt dann.
prefix und postfix werden von links nach rechts und von innen nach außen abgearbeitet, ansonsten muss man richtig klammern!

mfg
Vanice