CallByValue

PeterPan400

Mitglied
Java verwendet ja nur CallByValue.
Kann ich mir das deswegen so vorstellen:
einen primitiven Typen den ich an eine Methode übergebe, übergebe ich ja direkt den Wert:
Bsp: int a=5; Methode(a);
Wenn ich jetzt einen komplexen Typ habe, dann übergebe ich ja klasse1 und klasse1 enthält als value die Referenz zu dem Objekt von der Klasse.

Bsp: Klasse klasse1 = new Klasse();

Deswegen sind bei primitiven und komplexen Datentypen CallByValue obwohl eig. in dem Value bei Objekten eine Referenz steht.
Stimmt das so?
 

krgewb

Top Contributor
In Java muss man immer aufpassen. Ich habe dir ein Beispiel erstellt.

Ich erstelle zwei Personen, Egon und Mathilda. Danach schreibe ich p1 = p2. Danach benenne ich p2 um in Sandra. Zu guter Letzt lasse ich mir den Namen von p1 ausgeben. Es wird Sandra ausgegeben!
Java:
public class Hauptprogramm {

    public static void main(String[] args) {

        Person p1 = new Person("Egon");
        Person p2 = new Person("Mathilda");

        p1 = p2;

        p2.setName("Sandra");

        System.out.println(p1.getName());
    }
}

class Person {

    private String name;

    public Person(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
 
Zuletzt bearbeitet:

PeterPan400

Mitglied
Ok danke. Aber mein Gedanke stimmt dass in deinem Beispiel p1 als Wert die Referenz zu dem Objekt Egon hat und anschließend auf Mathilda zeigt und danach durch SET auf Sandra.
 

httpdigest

Top Contributor
Es heißt auch "Call"-by-value und nicht "Assign"-by-value. Die Calling Convention bezieht sich explizit darauf, wie Variablen bei Methodenaufrufen übergeben werden, und ob es möglich ist, bei Neuzuweisung eines Methodenargumentes innerhalb der aufgerufenen Methode, diese Zuweisung auch sichtbar zu machen beim Methodenaufrufer. Und das geht in Java nicht, wegen: Call-by-Value.
 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben