call-by-reference-Effekt bei Objekten

Wang

Bekanntes Mitglied
Hallo! :)

Das Skript mit "call-by-value" habe ich soweit verstanden.
Allerdings habe ich so meine Schwierigkeiten mit dem Skript für den "call-by-reference-Effekt bei Objekten."

Wenn der Parameter kein primitiver Typ ist, sondern ein Objekt (also z.B. ein Array - was genau Objekte sind, betrachten wir später) dann wird zwar in der Methode ebenfalls mit einer Kopie des Parameters gearbeitet, aber es handelt sich um eine Kopie der Speicheradresse.

Java:
public class Reference
{
   public static void changeValues (int[] werte, int index, int wert)
   {
      werte[index] = wert;
   }

   public static void main (String[] args)
   {
      int[] werte = {0, 1, 2};
      changeValues (werte, 1, 3);
      System.out.println (werte[1]);   // Ausgabe?
   }
}

Obwohl also auch hier die Parameterauswertung nach dem Prinzip call-by-value erfolgt, ist der Effekt der gleiche wie bei call-by-reference. Wir werden auf diesen Effekt zurückkommen.

Die Ausgabe ist 3.

Mir ist das wirklich ein Rätsel, warum die Ausgabe hier 3 ist. ???:L
Kann mir bitte jemand kurz den Ablauf dieses Programms erklären, denn dann sollte ich das wohl begriffen haben?

Vielen Dank für die Mühe! ;)
 

icarus2

Top Contributor
Beil call-by-value hast du jeweils nur mit einer Kopie gearbeitet. Heisst es wurde eine neue Variable erzeugt.

Hier wird auch eine neue Variable erzeugt, aber jetzt hast du die Referenz. Stell es dir so vor:
Irgendwo im Memory, sagen wir an der Adresse 300 ist dein Array gespeichert. Wenn du jetzt den Array übergibst, übergibst du diese Adresse, 300.

Das heisst jetzt, dann wenn du mit dem Array in der Methode arbeitest, so arbeitest du mit der gleichen Adresse im Speicher. Wenn an der Stelle 300 nun etwas verändert wird, ändert sich das auch für ausserhalb der Methode.

Du machst in deinem Methodenaufruf jetzt eigentlich nichts anderes als das:
[Java]
werte[1] = 3
[/Java]

Da du die Referenz übergeben hast, ändert sich der Array auch für ausserhalb der Methode, da NICHT mit einer Kopie des Arrays gearbeitet wird, sondern direkt mit der Adresse von dem Array.

PS:
Die Adresse 300 ist natürlich frei erfunden, soll nur fürs Verständnis sein. Hoffe, dass dir das ganze dadurch etwas klarer wird.
 
B

bygones

Gast
nur so am rande... Java hat KEIN call-by-reference

java hat immer call-by-value... nur kann der value eine ojektreferenz sein
 
Ä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
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
B Call by Reference Java Basics - Anfänger-Themen 7
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
M Override zeigt keinen Effekt Java Basics - Anfänger-Themen 9
X Methode bei mehrfachen Aufruf kein Effekt Java Basics - Anfänger-Themen 3
H Collections JTree remove zeigt keinen Effekt! Java Basics - Anfänger-Themen 8
K Licht effekt auf Bild! Java Basics - Anfänger-Themen 4
M slide effekt über page legen per klick(href) Java Basics - Anfänger-Themen 5
T meinThread.wait(); wirft immer Exeption & hat kein Effekt Java Basics - Anfänger-Themen 15
M Sich ändernde Buchstaben - Matrix Effekt Java Basics - Anfänger-Themen 24

Ähnliche Java Themen


Oben