call by value

Status
Nicht offen für weitere Antworten.

MQue

Top Contributor
Java arbeitet ja mit call by value also es wird eine Kopie übergeben,
Meine Frage wäre jetzt, ob sich das Programm dadurch übermäßig aufbläht, da ja, wenn ich eine Liste mit vielen Einträgen übergebe, das ganze kopiert wird und dann eben 2 mal im Speicher vorkommt,
Wird das mit dem Garbage Collector wieder bereinigt nach dem Methoden- Ende oder wie ist da die Strategie von Java?

mfg
 
S

SlaterB

Gast
Objekte werden nicht kopiert, nur die Referenz darauf, genau 4 Byte,
egal ob das Objekt selber 4 Byte oder 4 GB groß ist,

da Parameter auf dem Stack liegen und nicht auf den Heap, ist deren Lebensdauert sowieso fest geregelt,
da muss der Garbage Collector nicht ran
 

ARadauer

Top Contributor
viele anfänger haben immer das gefühl, das die werte kopiert werden, weil sie es mit Strings probieren.

String übergeben -> String in einer Methode ändern -> String ist beim Aufrufe immer noch der gleiche... aber das hat einen anderen Hintergurnd...
http://www.programmersheaven.com/2/FAQ-JAVA-String-Is-Immutable.

Ich versuchs mal zu erklären was das bedeutet, wenn eine Kopie der Referenz übergeben wird.
Stell dir vor in Objekt A wird eine ArrayList mit 5 Elementen an Objekt B übergeben. B lösche die Elemente raus und setzt die Arraylist auf null.
Wie sieht die Liste jetzt in A aus?
Die Liste existiert noch, ist aber leer! Warum? Es wurde eine kopie der Referenz übergeben, also eine Referenz auf die gleiche Liste, die geleer wurde. Aber die Referenz die null gesetzt wurde, war eine Kopie.


... so ungefähr...
 
S

SlaterB

Gast
> String übergeben -> String in einer Methode ändern -> String ist beim Aufrufe immer noch der gleiche... aber das hat einen anderen Hintergurnd...

nene, so kann man das nicht sagen,
da man Strings ja nur durch Neuzuweisung 'ändern' kann,
gilt das für alle Objekte gleichermaßen:

Code:
public class Test
{

    public static void main(String[] args)
        throws Exception
    {
        List list = new ArrayList();
        changeList(list);
        System.out.println(list.getClass().getName());
    }

    private static void changeList(List list)
    {
        list = new LinkedList();
    }

}

dass man String-Objekte in sich nicht ändern kann hat pauschmal mit Operationsaufruf oder nicht nichts zu tun,
denke auch nicht dass das da jemand verwechselt

edit: na ok, mag doch so zu interpretieren sein ;)
 

Janus

Bekanntes Mitglied
ausschlaggebende bedingung für call by reference ist, dass die identität geändert werden kann. und das unterstützt java nicht. java ist call by value, immer.

dass sich bei wertzuweisung an strings auch _immer_ die identität ändert ist ein sprachfeature und hat damit nichts zu tun.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Java - Call by value <-> Call by reference Allgemeine Java-Themen 16
P call by value/referenz Allgemeine Java-Themen 4
N Sieht aus wie ein "Call by Referece/Call by Value" Allgemeine Java-Themen 7
S Call by Value Allgemeine Java-Themen 9
H Aus der FAQ: Call by Value <-> Call by Reference Allgemeine Java-Themen 8
A Java Call-Hierarchie Allgemeine Java-Themen 2
V JNI Call Crash verhindern (abfangen) Allgemeine Java-Themen 2
E wie call by reference mit Wrapper-Klassen? Allgemeine Java-Themen 2
K Als Rückgabewert ode call by referenz was ist sauberer? Allgemeine Java-Themen 12
J InvocationException im Thread (innerhalb von call() einer Callable Klasse) Allgemeine Java-Themen 2
hdi ClassLoader / Constructor Call intern Allgemeine Java-Themen 11
S Performance und Function Call Depth Allgemeine Java-Themen 6
S Active-X Call / Invoke?` Allgemeine Java-Themen 7
sliwalker Call by Reference - Was stimmt denn nun ? Allgemeine Java-Themen 14
W Socket.setSoTimeout -> BufferedReader -> Default value Allgemeine Java-Themen 4
M Thymeleaf th value und th text Allgemeine Java-Themen 1
N Value Wert aus HTML-Button mittels thymeleaf spring an java übergeben Allgemeine Java-Themen 2
Meeresgott Effizientester Weg um nach der Value einer verschachtelten Map aufzulösen Allgemeine Java-Themen 5
Thallius Key/Value Table in Klasse einlesen Allgemeine Java-Themen 14
S @Value mit bestimmt Werten, sonst default Allgemeine Java-Themen 42
H Klassen LibGDX - Verschiedene Klassen als Value in einer Map Allgemeine Java-Themen 8
B HashMap aus Value Key bekommen Allgemeine Java-Themen 2
F Unterschied zwischen NormalizedValue und Value Allgemeine Java-Themen 5
Q For-Schleife in String-Value Allgemeine Java-Themen 3
L Variablen HashMap nimmt value nicht an Allgemeine Java-Themen 3
B Load of Known null Value Allgemeine Java-Themen 9
T Hashmap mit geordneter/ungeordneter liste als Value Allgemeine Java-Themen 5
algorismi int-variable Value Change event Allgemeine Java-Themen 3
G HTTP key-value-paar Allgemeine Java-Themen 8
J Map nach value sortieren Allgemeine Java-Themen 14
G Verschachtelte Treemaps, nach Value sortieren Allgemeine Java-Themen 11
faetzminator Regex zur Suche von "value-losen" Attributen in HTML Tags Allgemeine Java-Themen 7
T Set.contains() auch false wenn value == null? Allgemeine Java-Themen 4
G Generics in Map. Type of value abhängig vom key Allgemeine Java-Themen 3
S Map die die auch ein getKey(value) erlaubt? Allgemeine Java-Themen 2
F Javadoc: @value tag nicht für private fields? Allgemeine Java-Themen 11
T [TreeMap] Corresponding value to a key Allgemeine Java-Themen 10
V Objekt aus Session als copy by value bekommen Allgemeine Java-Themen 4
R Wert in Hashtable ändern (Key ändern, Value bleibt) Allgemeine Java-Themen 3
C Map(Key/Value) mit mehreren Values Allgemeine Java-Themen 16
M Value als String in beliebige Klasse konvertieren Allgemeine Java-Themen 18
Fredy Return by value mit String?? Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben