Programmausgabe nachvollziehen

michi1504

Neues Mitglied
Hallo zusammen,

ich bin noch recht unerfahren was Java angeht.. Daher erschließt sich mir noch nicht ganz warum folgender Code 110, 20, 30 ausgibt.
Ich hoffe Ihr könnt mir helfen =)
Code:
import static java.lang.System.out;

public class Test{
    private int x;
    public Test(int val){
        this.x = val;
    }
   
    public void foo (int x, Test ref){
        ref = new Test(100);
        x += 200;
        this.x += ref.x;
    }

    public static void main (String[]args){
        Test a = new Test (10);
        Test b = new Test(20);
        int c = 30;
       
        a.foo (c,b);
        out.println(a.x+ " "+b.x+" "+c);
            }
    }

Ausgabe:
110 20 30

Die letzten beiden Werte (b.x und c.x) kann ich nachvollziehen, aber den Wert für a.x verstehe ich nicht.
 
X

Xyz1

Gast
Schnelle Antwort: c ändert sich nicht, b.x ändert sich nicht(*), zu a.x wird 100 hinzuaddiert, das macht 110, ref ist nur in der Methode "bekannt", x auch (klar), ref hat einen Wert von 100.

*: b wird zwar nochmal verwurstet, aber gleich überschrieben.

Betrachten wir es mal insgesamt: Hast du zufällig Codezeilen generiert?
 

Meniskusschaden

Top Contributor
Innerhalb der Klasse Test gibt es die Objektvariable x. Ausserdem gibt es innerhalb der Methode foo() die lokale Variable x, die der Methode als Parameter übergeben wird. Das sind zwei verschiedene Variablen, die denselben Namen tragen. Deshalb wird innerhalb von foo() die Objektvariable mit this.x und die lokale Variable mit x angesprochen.
 

JStein52

Top Contributor
in foo(...) ist this.x zunächst mal 10 weil es sich bei this ja um das Objekt "a" handelt. Dazu wird dann ref.x addiert, das ist 100. Also insgesamt 110
 

Ähnliche Java Themen

Neue Themen


Oben