Passing Reference by Value

Status
Nicht offen für weitere Antworten.

chrs

Mitglied
Code:
public class Test extends Object {

    public static void main(String[] args) {
        List<String> list = new ArrayList<String>();
        list.add("XYZ");
        list.add("ABC");
        list.add("GHI");

        System.out.println();

        System.out.println(list);
        removeFirst(list);
        System.out.println(list);

        Integer o = 3;
        System.out.println(o);
        changeValue(o);
        System.out.println(o);
    }

    static void removeFirst(List<String> list) {
        list.remove(0);
    }

    static void changeValue(Integer i) {
        i = 12;
    }
}

Hallo,

ich verstehe einfach nicht warum das Objekt auf das die Referenz bei removeFirst zeigt verändert werden kann, und bei changeValue nicht?

Ich habe bereits zwei Artikel zu diesem Thema gelesen werde aber nicht schlau daraus.
http://www.java-forum.org/de/viewtopic.php?t=5390
http://www.yoda.arachsys.com/java/passing.html

Schön wenn es mir jemand erklärt..
 

tfa

Top Contributor
Bei removeFirst änderst du den inneren Zustand des Objekts "list". Diese Änderung bleibt auch nach Verlassen der Methode bestehen.
changeValue macht was ganz anderes. Hier wird der Variablen i (eigentlich ein Parameter) lokal innerhalb der Methode ein neuer Wert zugewiesen. Diese Zuweisung hat aber nichts mit der Variablen o zu tun, die beim Methodenaufruf als Argument übergeben wurde. Es wurde nur die Referenz "by value" kopiert.
Call by reference gibt es nicht in Java.
 

musiKk

Top Contributor
Du uebergibst nur eine Referenz... einen Griff auf ein Objekt. bei removeFirst() nimmst du die Referenz und veraenderst das Objekt. Bei changeValue() veraenderst du die Referenz, nicht das Objekt. Das interessiert die urspruengliche Referenz in deiner main() aber nicht die Bohne.
 
B

Beni

Gast
Es wird vielleicht klarer wenn man sich aufschreibt, was diese Codes machen.

list.remove( 0 ):
1. Lade Referenz "list" (Objekt wird vorgemerkt)
2. Benutze 1. um Methode "remove" zu finden
3. Lade int 0.
4. Benutze 2 und 3 um Methode aufzurufen.

i = 12:
1. Lade int 12
2. Lade Integer-Objekt das 12 entspricht (Autoboxing)
3. Schreibe 2. in Referenz "i"


Der Unterschied? Beim ersten Code wird "list" geladen, beim zweiten Code wird "i" beschrieben. Beim zweiten gibt es nie einen Zugriff auf das Objekt auf das i verweist, wie soll es dann verändert werden?
 

chrs

Mitglied
musiKk hat gesagt.:
Du uebergibst nur eine Referenz... einen Griff auf ein Objekt. bei removeFirst() nimmst du die Referenz und veraenderst das Objekt. Bei changeValue() veraenderst du die Referenz, nicht das Objekt. Das interessiert die urspruengliche Referenz in deiner main() aber nicht die Bohne.

Danke an alle für die Antworten, aber die Antwort hats echt super verständlich gemacht ... endlich habe ich es verstanden.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Methods passing Java Basics - Anfänger-Themen 2
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
M Cannot make a static reference to the non-static method Java Basics - Anfänger-Themen 10
H call by reference & value Java Basics - Anfänger-Themen 14
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
B Call by Value/Reference Java Basics - Anfänger-Themen 4
O Illegal Group Reference Java Basics - Anfänger-Themen 4
Joew0815 Methoden Objekt als Methoden-Parameter - Kein call-by-reference? Java Basics - Anfänger-Themen 12
L Cannot make a static reference to the non-static method Java Basics - Anfänger-Themen 6
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
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
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
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
B Call By reference (Null pointer exception) Java Basics - Anfänger-Themen 6
M Reference Java Basics - Anfänger-Themen 2
C Call by reference Java Basics - Anfänger-Themen 11
W call-by-reference-Effekt bei Objekten Java Basics - Anfänger-Themen 3
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
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
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
F Wie kann ich call by reference umgehen? Java Basics - Anfänger-Themen 14
L [Gelöst] Cannot make a static reference ... Java Basics - Anfänger-Themen 12
F Rekursive Aufrufe, Parameterübergabe, call by reference Java Basics - Anfänger-Themen 3
N Connot make a static reference. deklarierungsfehler Java Basics - Anfänger-Themen 10
F Call-By-Reference umgehen Java Basics - Anfänger-Themen 4
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
B Call by Reference Java Basics - Anfänger-Themen 7
frau-u Altes Problem: non-static method cannot be reference Java Basics - Anfänger-Themen 7
S call by reference vs. call by value - pls help Java Basics - Anfänger-Themen 7
S HashMap mehrere Keys zu einem Value Java Basics - Anfänger-Themen 3
I JSON - cannot deserialize from Object value Java Basics - Anfänger-Themen 16
C Long value an Stringbuilder übergeben, equals Methode funktioniert nicht Java Basics - Anfänger-Themen 2
D String value change listener Java Basics - Anfänger-Themen 2
G Java Object value und entity? Java Basics - Anfänger-Themen 2
ms_cikar Den Wert einer Hex. value bestimmten. Java Basics - Anfänger-Themen 8
R Boolean value ohne Kontrollstrukturen ändern Java Basics - Anfänger-Themen 5
F Entity vs value Java Basics - Anfänger-Themen 3
R Value von einem JSON-Objekt ausgeben Java Basics - Anfänger-Themen 4
V NullPointerException, wenn Key und Value null sind Java Basics - Anfänger-Themen 2
K Value eines HashMaps in einer HashMap wiedergeben. Java Basics - Anfänger-Themen 5
E jProgressbar, 6 Versuche, welche value angeben ? Java Basics - Anfänger-Themen 3
G Klassen Call by Value auch bei Objekten? Java Basics - Anfänger-Themen 2
E Hash map Value Wert hochzuholen/ändern Java Basics - Anfänger-Themen 7
J Variablen Komsiche System.in.read() return-value? Java Basics - Anfänger-Themen 3
N JFreeChart - Value und veriable Zeitachse Java Basics - Anfänger-Themen 15
J Open Office Property Value mit Java aufrufen Java Basics - Anfänger-Themen 0
R Property Value als null setzen Java Basics - Anfänger-Themen 1
O Erste Schritte TreeMap nach Value sortieren Java Basics - Anfänger-Themen 2
B Compiler-Fehler Hilfe!!! required variable ; found value Java Basics - Anfänger-Themen 4
M Arrays als return Value? Java Basics - Anfänger-Themen 2
S Integer/Value-Paar in Prio-Queue ohne Comparator Java Basics - Anfänger-Themen 5
V Methoden key value Parameter Java Basics - Anfänger-Themen 11
C Probleme bei einem Stringvergleich - Attribut "value" unterscheidet sich Java Basics - Anfänger-Themen 9
F HashMap nach kleinstem Value durchsuchen Java Basics - Anfänger-Themen 11
D TreeMap: Höheren Key ermitteln und den Value liefern Java Basics - Anfänger-Themen 3
Todesbote Map (Key=String; Value = Vector) Value/Vector sortieren Java Basics - Anfänger-Themen 13
B Variablen unique Value Java Basics - Anfänger-Themen 12
R Key/Value ohne Maps? Java Basics - Anfänger-Themen 2
B Datentypen Key/Value sortieren Java Basics - Anfänger-Themen 15
S Warnung in Eclipse: unassigned closeable value Java Basics - Anfänger-Themen 20
J Objectreferenz statt value an Methode uebergeben? Java Basics - Anfänger-Themen 2
K HashMap auf leere Key-Value-Paare prüfen Java Basics - Anfänger-Themen 14
C Collections String[] als value in HashMap Java Basics - Anfänger-Themen 6
P Key anhand von Value finden (Hashtable) Java Basics - Anfänger-Themen 3
B JavaSkript Form-Tag Value & Post Java Basics - Anfänger-Themen 6
M String( char[] value ) Java Basics - Anfänger-Themen 3
feardorcha Java von Kopf bis Fuß "Java ist Pass-by-Value" Java Basics - Anfänger-Themen 6
M Value-returing Methode funktioniert nicht Java Basics - Anfänger-Themen 4
O Was bedeutet public class value? Java Basics - Anfänger-Themen 3
M jSpinner: nur angezeigte Value auslesen? Java Basics - Anfänger-Themen 3
F Erste Schritte return (char)toUnsignedInt(value) Java Basics - Anfänger-Themen 2
J unexpected type variable/value Java Basics - Anfänger-Themen 2
F Hilfe Regular Expression Grouping Value Java Basics - Anfänger-Themen 3
K unexpected type variable/value Java Basics - Anfänger-Themen 7
turmaline Duration Value Java Basics - Anfänger-Themen 8
T Enum - Key als Value ermitteln Java Basics - Anfänger-Themen 7
K java pass by value Java Basics - Anfänger-Themen 29
capgeti Datentypen Static generic return value von Subclass? Java Basics - Anfänger-Themen 9
A ein map key/value"problem" Java Basics - Anfänger-Themen 9
A Regex get Value Java Basics - Anfänger-Themen 5
D Key und Value aus hashMap speichern Java Basics - Anfänger-Themen 7
M HashMap-Value | Array Java Basics - Anfänger-Themen 3
N Methode erfüllt nicht den zweck (Call by value) Java Basics - Anfänger-Themen 17

Ähnliche Java Themen

Neue Themen


Oben