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
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
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
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