CallbyValue

Apple_a_day

Mitglied
Hallo!
Soweit ich mitbekommen habe, funktionieren Parameterübergaben in Java immer nach CallbyValue. Dabei wird soweit ich glaube zu wissen der Wert (bei primitvien Datentypen) in den lokalen Speicherbereich der Variable kopiert, kann von der Methode aber nicht geändert werden, weil sie nur eine Kopie übergeben bekommt. Soweit ich weiterhin mitbekommen habe wird bei den komplexen Datentypen dann nicht die konkrete Instanz sondern nur die Referenz kopiert.

Nun möchte ich nur fragen, welche Auswirkungen das dann auf die Behandlung der Werte hat
(können Instanzen von Objektdatentypen verändert werden von der Methode oder nicht?)
Für ein Beispiel wäre ich auch dankbar!

Und: Warum wird in diesem Beispiel hier zweimal 200 ausgegeben obwohl die Methode doch eigentlich keinen Einfluss auf den Wert haben sollte?
Java:
public    class CallbyValue{
     static double m_wert = 100;
     static void wertaendern() {
         m_wert += 100;
     }

    


   

       
   
    

    public static void main(String[] args) {
        wertaendern();

        System.out.println("Der Wert ist " +m_wert);
        System.out.println(m_wert);
        wertaendern();
       

}
}
 
Zuletzt bearbeitet:

Underpay0299

Mitglied
Die Variable kann meines Wissens nur mit "final" nicht verändert werden. Static ist dafür da, dass wenn eine Klasse in mehreren Instanzen läuft (new test();new test();) die Instanzen ihre Variable "teilen". Das heißt wenn eine Instanz die Variable auf 100 setzt ist sie für alle anderen auch 100. Wenn die Variablen nicht static sind ist und eine Instanz die Variable auf 100 ändern sind sie für alle anderen Instanzen unverändert.

Ich hoffe ich habe mich nicht zu umständlich ausgedrückt :)

LG Paul
 

mrBrown

Super-Moderator
Mitarbeiter
(können Instanzen von Objektdatentypen verändert werden von der Methode oder nicht?)
Je nachdem wie man deine Frage versteht: Ja.

Übergibt man der Methode ein Objekt, kann man die Instanzvariablen dieses Objekts verändern.

Und: Warum wird in diesem Beispiel hier zweimal 200 ausgegeben obwohl die Methode doch eigentlich keinen Einfluss auf den Wert haben sollte?
CallByValue bezieht sich auf Methodenparameter.

In deinem Fall gibt es eine Instanz-Variable, und die Methode verändert sie.
Würdest du der Methode stattdessen den Wert übergeben, hätte eine Änderung des Parameters keine Auswirkung auf den Wert außerhalb der Methode.
 

AndyJ

Bekanntes Mitglied
Und: Warum wird in diesem Beispiel hier zweimal 200 ausgegeben obwohl die Methode doch eigentlich keinen Einfluss auf den Wert haben sollte?

wertaendern();

System.out.println("Der Wert ist " +m_wert);
System.out.println(m_wert);
wertaendern();


Weil Du den Wert aenderst, dann zweimal das Ergebnis druckst und dann den Wert nochmal aenderst - ohne den neuen Wert dann auszugeben.
 

Apple_a_day

Mitglied
Die Variable kann meines Wissens nur mit "final" nicht verändert werden. Static ist dafür da, dass wenn eine Klasse in mehreren Instanzen läuft (new test();new test();) die Instanzen ihre Variable "teilen". Das heißt wenn eine Instanz die Variable auf 100 setzt ist sie für alle anderen auch 100. Wenn die Variablen nicht static sind ist und eine Instanz die Variable auf 100 ändern sind sie für alle anderen Instanzen unverändert.

Ich hoffe ich habe mich nicht zu umständlich ausgedrückt :)

LG Paul

Danke, war sehr gut verständlich!
 

Apple_a_day

Mitglied
Je nachdem wie man deine Frage versteht: Ja.

Übergibt man der Methode ein Objekt, kann man die Instanzvariablen dieses Objekts verändern.


CallByValue bezieht sich auf Methodenparameter.

In deinem Fall gibt es eine Instanz-Variable, und die Methode verändert sie.
Würdest du der Methode stattdessen den Wert übergeben, hätte eine Änderung des Parameters keine Auswirkung auf den Wert außerhalb der Methode.

Dankesehr!
 
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben