Call by Reference

Status
Nicht offen für weitere Antworten.

Biesterfeld

Aktives Mitglied
Hej,

also ich hab immernoch ein grundlegendes Probem mit der Parameterübergabe in Java. Eigentlich dachte ich ich hättes schon verstanden bis ich http://www.java-forum.org/de/viewtopic.php?t=5390 (viertes Code Beispiel) gelesen habe. Nun die Frage warum im folgenden Fall ein - in meinen Augen - widersprüchliches Ergebnis rauskommt:

Code:
public static void main(String[] args){
  Integer i = new Integer(1);
  Integer j = new Integer(2);
  Stack stack = new Stack();
  stack.push(i);
  stack.push(j);
  System.out.println(stack.size());
  popStack(stack);
  System.out.println(stack.size());
}
      
public static void popStack(Stack stack){
  stack.pop();
}

Ich hätte jetzt erwartet, dass wie in oben beschriebenen Beispiel die Ausgabe 2 2 sein müsste, is aber 2 1.

Vielen Dank und beste Grüße
Biesterfeld
 

Bleiglanz

Gesperrter Benutzer
in der Methode popStack machst du doch ein pop mit dem Stack, übergeben wird ja eine Referenz auf das Stack objekt?
 

Biesterfeld

Aktives Mitglied
Hej,

Bleiglanz hat gesagt.:
... übergeben wird ja eine Referenz auf das Stack objekt?

und genau das meine ich, im Prinzip ist mir alles klar, mein Verständnisproblem bezieht sich viel eher auf das genannte Beispiel.
Ich find den Satz
"Java never uses call by reference. It always uses call by value."
sehr verwirrend.

Aber ich glaube dass ich jetzt das Beispiel verstanden habe: Ich ändere in der Methode swap() nicht das Feld selber, sondern setze nur innerhalb der Methode die Referenzen auf das Feld jeweils neu.

Is das so richtig? Also ich versteh dann die zitierte Aussage immernoch nicht. Egal.

Hab besten dank.
Biesterfeld[/quote]
 
W

wro

Gast
Ganz einfach. Man muss vielleicht zwischen primitiven Datentypen und Objekten unterscheiden. Es wird in Java immer eine Kopie übergeben. Wenn das ein Integer ist, so wirkt sich eine Änderung nur innerhalb der Methode auf.

Bei einem Objekt erhalte ich eine Kopie der Referenz. Wenn ich nun über die Kopie der Referenz etwas an dem Objekt ändere, schlägt dies natürlich auch außerhalb der Methode durch. Wenn ich die Kopie der Referenz = null setze, dann ändere ich nur die Kopie. Die eigentliche Referenz außerhalb der Methode zeigt nach wie vor auf das Objekt.


Gruß

Wolfgang
 

Biesterfeld

Aktives Mitglied
Hej wro,

habs jetzt verstanden, bzw. beginne immer besser zu verstehen. Dank dir auch ganz herzlich

Wobei ich die Aussage "es gibt kein call by reference" aber immernoch für sehr irreführend halte.
Die Kopie einer Referenz ist auch wieder eine Referenz. Nämlich eine Referenz auf das Objekt das sich damit aufrufen lässt. Ins englische übersetzt heisst das soviel wie "call by reference".

Nun denn, wünsch euch noch nen schönen Abend.

Beste Grüße
Biesterfeld
 
W

wro

Gast
Das mit dem "call by reference" ist vielleicht deshalb verwirrend weil das, was übergeben wird, eine Referenz ist. Aber meines Wissens sind die Ausdrücke "call by value" und "call by reference" schon wesentlich älter. Die stammen aus einer Zeit als man noch garnicht mit Referenzen gearbeitet hat. Seit man in C++, Object Pascal, Java und anderen Programmiersprachen nun von Referenzen redet, bzw. diese eingeführt hat, wird's natürlich etwas verwirrend.


Gruß

Wolfgang
 
B

bygones

Gast
ich stimme wolfgang zu - die begriffe sind leider sehr verwirrend.

Das Problem ist, dass zwar die Kopie einer Referenz auch eine Referenz ist, aber dieser Mechanismus verhindert Sachen die man mit einer "normalen" Referenz anstellen kann (siehe FAQ)...
 

Bleiglanz

Gesperrter Benutzer
sagen wirs mal so:

in java wird IMMER "call by value verwendet", d.h. es wird eine Kopie des Wertes der Variablen übergeben

ABER bei Objektvariablen ist dieser "value" eben zufällig eine Referenz, die dann kopiert wird ...

der Sprachgebrauch ist schon in Ordnung, der Begriff "call by reference" hat in Java eben überhaupt keinen Sinn, wenn er so gemeint ist wie in C++ ...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Java call by Value oder Reference Java Basics - Anfänger-Themen 35
R Call-by-Value, Call-by-Reference, Call-by-Name Ausgabe Java Basics - Anfänger-Themen 1
X Verständnisproblem Call-By-Reference Java Basics - Anfänger-Themen 5
U Worin besteht der Unterschied zwischen call by reference und call by value? Java Basics - Anfänger-Themen 14
H call by reference & value Java Basics - Anfänger-Themen 14
B Call by Value/Reference Java Basics - Anfänger-Themen 4
Joew0815 Methoden Objekt als Methoden-Parameter - Kein call-by-reference? Java Basics - Anfänger-Themen 12
T Array prozedur, call by reference ? Java Basics - Anfänger-Themen 6
B Variablen Wie macht man eine call by reference mit primitiven Datentypen in Java? Java Basics - Anfänger-Themen 2
S call by reference? Java Basics - Anfänger-Themen 52
F Verständisproblem bzgl. nicht Vorhandensein von Call-by-reference Java Basics - Anfänger-Themen 2
B Call By reference (Null pointer exception) Java Basics - Anfänger-Themen 6
C Call by reference Java Basics - Anfänger-Themen 11
W call-by-reference-Effekt bei Objekten Java Basics - Anfänger-Themen 3
S "Call by Reference" Java Basics - Anfänger-Themen 12
M try-catch, call-by-reference, Streaming und Strings Java Basics - Anfänger-Themen 10
S call by reference Java Basics - Anfänger-Themen 7
F Wie kann ich call by reference umgehen? Java Basics - Anfänger-Themen 14
F Rekursive Aufrufe, Parameterübergabe, call by reference Java Basics - Anfänger-Themen 3
F Call-By-Reference umgehen Java Basics - Anfänger-Themen 4
S call by reference vs. call by value - pls help Java Basics - Anfänger-Themen 7
K Eigene Annotations, Pre-/Post-/Call-Method Java Basics - Anfänger-Themen 6
G Klassen Call by Value auch bei Objekten? Java Basics - Anfänger-Themen 2
R Call By Referene? Java Basics - Anfänger-Themen 10
N Methode erfüllt nicht den zweck (Call by value) Java Basics - Anfänger-Themen 17
0 Call by value Java Basics - Anfänger-Themen 3
J Call by ... Java Basics - Anfänger-Themen 16
F java call jython Java Basics - Anfänger-Themen 7
C Unchecked Call? Wie Warnung beseitigen? Java Basics - Anfänger-Themen 3
I call to super must be first statement in constructor Java Basics - Anfänger-Themen 3
M Cannot make a static reference to the non-static method Java Basics - Anfänger-Themen 10
T Boolean by Reference Java Basics - Anfänger-Themen 6
T Schleifenindex "by reference" / "by value" Java Basics - Anfänger-Themen 13
O Socket by reference übergeben Java Basics - Anfänger-Themen 0
A Cannot make a static reference to the non-static field Java Basics - Anfänger-Themen 6
O Illegal Group Reference Java Basics - Anfänger-Themen 4
L Cannot make a static reference to the non-static method Java Basics - Anfänger-Themen 6
K Variablen Cannot make a static reference to the non-static field time Java Basics - Anfänger-Themen 6
P Compiler-Fehler Cannot make a static reference to the non-static field process Java Basics - Anfänger-Themen 3
C Reference - wird gegen meinen Willen - auf null gesetzt Java Basics - Anfänger-Themen 2
F Mal wieder: Cannot make a static reference to the non-static method Java Basics - Anfänger-Themen 9
F Cannot make a static reference to the non-static method Java Basics - Anfänger-Themen 3
M Reference Java Basics - Anfänger-Themen 2
B Cannot make a static reference...?? Java Basics - Anfänger-Themen 5
B Mal wieder "cannot make a static reference..." Java Basics - Anfänger-Themen 2
N Reference to non-static method Java Basics - Anfänger-Themen 8
C Passing Reference by Value Java Basics - Anfänger-Themen 4
G Wieso ist eine String-Übergabe keine by-reference-Zuweisung? Java Basics - Anfänger-Themen 7
R Cannot make a static reference to the non-static method Java Basics - Anfänger-Themen 5
L [Gelöst] Cannot make a static reference ... Java Basics - Anfänger-Themen 12
N Connot make a static reference. deklarierungsfehler Java Basics - Anfänger-Themen 10
T object reference counts Java Basics - Anfänger-Themen 14
T Cannot make a static reference to the non-static field Java Basics - Anfänger-Themen 8
frau-u Altes Problem: non-static method cannot be reference Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben