Worin besteht der Unterschied zwischen call by reference und call by value?

Blender3D

Top Contributor
Die Fachwelt scheidet sich ein bisschen beim Punkt, ob Java bei Referenzen nicht call by reference is. Ich würd diesen Punkt also nicht unbedingt als Fehler bewerten.
call by Reference: Es wird ein Zeiger übergeben. In Java immer ein konstanter Pointer also eine Referenz. In C sind auch echte Pointer möglich. Das heißt: Der Zeiger ist nicht Konstant und kann verändert werden. Stichwort Pointer Arithmetik.
Dadurch kann die aufgerufene Funktion, die Daten des übergebenen Objekt sofern es nicht konstant ist und die Daten zugängig sind verändern. Nach der Rückkehr aus der Funktion sind die Daten auch im aufrufendem Teil verändert.
call by Value: Es wird eine Kopie übergeben. Diese kann in der aufgerufenen Funktion geändert werden. Nach der Rückkehr ist das kopierte Objekt aber unverändert.
 

Blender3D

Top Contributor
Achtung mit "Java ist immer Call-by-Value" man muss unterscheiden:
1. primitive Datentypen (byte, short, int, long, float, double, char, boolean und als ausnahme String): Call-by-Value
2. komplexe Datentypen genauer referenztypen (List oder jedes ander Oject (z. B. MyClass c = new MyCass();): Call-by-Value kopiert nur die Referenz daher verhält es sich wie Call-by-Reference!
Trozdem wird Java als immer Call-by-Value bezeichnet.
 

mihe7

Top Contributor
Call-by-Value kopiert nur die Referenz daher verhält es sich wie Call-by-Reference!
Nein, das verhält sich nicht wie CBR - und Java ist immer CBV.

Nehmen wir mal eine Variable "var" an. Die stehe an Adresse x. Dort sei ein Wert y abgelegt - bei primitiven Typen ist es (EDIT: das y) der Wert selbst, bei Referenztypen eine Referenz (EDIT: besser Adresse), das spielt aber keine Rolle.

An die Methode wird bei CBV das y, bei CBR das x übergeben. Das hat zur Folge, dass sich im Fall von CBR eine Zuweisung an den Parameter auf die Variable "var" auswirkt, während man im Fall von CBV dem Parameter zuweisen kann, was man will - das interessiert die Variable "var" nicht.
 

abc66

Top Contributor
Auch Stack Overflow beantwortet diese Frage klar mit cbv. Bei Referenzen habe ich eben nicht die Möglichkeit, eine andere Referenz an diese Stelle zuzuweisen mit Auswirkungen auf den Caller. Und wenn ich ein immutable Objekt übergebe, kann der Caller sogar sichergehen, das sein Objekt nach Rückkehr unverändert ist...
 
K

kneitzel

Gast
Wer sich hier etwas unsicher ist, dann evtl. einfach noch einmal eine kleine Verdeutlichung (wobei eigentlich alles gesagt ist, aber wenn die Begründung teilweise nur ist "Steht so bei SO", dann reicht es evtl. doch noch nicht):

Bei Call By Reference geht es nicht darum, dass einfach irgend eine Referenz übergeben wird. (Also z.B. eine Referenz auf ein Objekt) sondern es geht ganz klar um eine Referenz auf eine Variable vom vorgegebenen Typ. Und genau solche Referenzen auf Variablen kennt Java nicht.

Und das bedeutet für einen Parameter vom Typ Object oder abgeleitet zwar, dass eine Referenz übergeben wird. Aber das ist nur eine Referenz auf eine Instanz vom Typ Object (oder abgeleitet) oder eben null. Call By Referenz müsste aber eben eine Referenz auf eine Variable vom Typ Object sein (Also sozusagen eine Reference auf eine Referenz...

Die Verwirrung kommt hier nur auf, weil das Wort "Referenz" in für zwei eigentlich unterschiedliche Dinge verwendet wird.
 

mihe7

Top Contributor
Und genau solche Referenzen auf Variablen kennt Java nicht.
Das gefällt mir sehr gut.

Weniger genau, dafür vielleicht etwas einprägsamer, ohne die technischen Hintergründe genauer kennen zu müssen:

Steht der Parameter der aufgerufenen Methode für eine Kopie der übergebenen Variable -> CBV
Steht der Parameter der aufgerufenen Methode stellvertretend für die übergebene Variable -> CBR
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Worin besteht der Sinn und Anwendungsbereich von Dreidimensionalen Arrays? Java Basics - Anfänger-Themen 11
T Unterschiedliche Datentypen - worin abspeichern? Java Basics - Anfänger-Themen 18
B Überprüfung dass Zahl nur aus 0,1 besteht Java Basics - Anfänger-Themen 2
MrSnake Prüfen ob TitledPane schon besteht Java Basics - Anfänger-Themen 2
P Zugriff auf Attribute einer Klasse, zu der keine Verbindung besteht Java Basics - Anfänger-Themen 11
K Erste Schritte Eingabetext besteht aus mehreren Zeilen? Java Basics - Anfänger-Themen 3
T socket.close aber verbindung besteht noch Java Basics - Anfänger-Themen 4
J Bestimmen ob String aus Kleinbuchstaben besteht Java Basics - Anfänger-Themen 16
MoxMorris Integer.MAX_VALUE und Double.MAX_VALUE Unterschied Java Basics - Anfänger-Themen 3
R Java boolean Unterschied " == " und " = " Java Basics - Anfänger-Themen 3
berserkerdq2 Größter unterschied von extends thread und implements runnable? Java Basics - Anfänger-Themen 2
P Unterschied Installation von zipped JDK vs Installer-JDK (auf Windows)? Java Basics - Anfänger-Themen 2
S Unterschied zwischen Denkweisen Java Basics - Anfänger-Themen 13
M Unterschied Integer.toString(x) und x.toString() Java Basics - Anfänger-Themen 22
H Arrays: Größten Zahlen Unterschied herausfinden Java Basics - Anfänger-Themen 20
Ras Unterschied zwischen parser xml and api xml Java Basics - Anfänger-Themen 7
K Unterschied Information Hiding und Kapselung? Java Basics - Anfänger-Themen 2
X Was ist der Unterschied zwischen materialisierten und nichtmaterialisierten Attributen einer Klasse? Java Basics - Anfänger-Themen 1
jhCDtGVjcZGcfzug Was ist der Unterschied zwischen diesen Quellcodes? Java Basics - Anfänger-Themen 3
G Methoden wo ist der Unterschied?? Java Basics - Anfänger-Themen 11
D Unterschied charAt() substr() Java Basics - Anfänger-Themen 3
Y Unterschied zwischen WindowBuilder und herkömmlichen erstellen des GUI´s? Java Basics - Anfänger-Themen 9
D Unterschied == und equals in Arrays Java Basics - Anfänger-Themen 2
H Unterschied Konstruktor und Klassenname x = new Klassenname; Java Basics - Anfänger-Themen 3
H .jar unterschied .class Java Basics - Anfänger-Themen 3
E Unterschied zwischen new und import Java Basics - Anfänger-Themen 5
O Unterschied Arrays, Listen, Mengen Java Basics - Anfänger-Themen 24
K Unterschied for-Schleife Java Basics - Anfänger-Themen 14
B Unterschied zwischen (List<T> a) und (T[] a) Java Basics - Anfänger-Themen 7
M Schlüsselworte Unterschied: String.matches und Pattern.compile Java Basics - Anfänger-Themen 2
G Unterschied Instanz- Klassenvariable Java Basics - Anfänger-Themen 11
C Methoden Unterschied zwichen public int, public static int und public static void Java Basics - Anfänger-Themen 2
Aprendiendo Unterschied zwischen Referenzvariable und Instanzvariable. Java Basics - Anfänger-Themen 2
H Unterschied BufferedReader und BufferedInputStream Java Basics - Anfänger-Themen 4
N Unterschied von Post- und Preinkrement Java Basics - Anfänger-Themen 3
N Unterschied zwischen Checked und Unchecked Exceptions Java Basics - Anfänger-Themen 12
T Unterschied dynamischer und statischer Laufzeittyp Java Basics - Anfänger-Themen 1
schoenosrockos Unterschied zwischen Objekten und vererbungen Java Basics - Anfänger-Themen 1
D Unterschied Date - Calendar Java Basics - Anfänger-Themen 1
J Variablen Unterschied zwischen lokalen-, Instanz-, Klassenvariablen Java Basics - Anfänger-Themen 6
J Warum ist das ein Unterschied (Integer / int) Java Basics - Anfänger-Themen 2
S Erste Schritte Unterschied "if" und "else if" Java Basics - Anfänger-Themen 27
F Erste Schritte Unterschied: Array "leer" / "null" Java Basics - Anfänger-Themen 3
V Unterschied x++ und x=x++ Java Basics - Anfänger-Themen 6
O Unterschied Baum <-> Automat Java Basics - Anfänger-Themen 2
A Klassen Unterschied Warteschlange, Stapel und Liste Java Basics - Anfänger-Themen 3
L Unterschied zwischen Klassen - und Instanzvarbiablen Java Basics - Anfänger-Themen 1
M Wo liegt der Unterschied? Deklaration Klasse oder Konstruktur Java Basics - Anfänger-Themen 3
S Unterschied print() und println() Java Basics - Anfänger-Themen 3
S Unterschied .jar Datei ausführen und junit Testfall... Java Basics - Anfänger-Themen 3
S Datentypen Unterschied elementare und zusammengesetzte/strukturierte Datentypen Java Basics - Anfänger-Themen 5
M Unterschied zwischen Classpath eines Eclipse Projektes und dem CLASSPATH? Java Basics - Anfänger-Themen 3
S Unterschied Ausführung in IDE <-> Befehlszeile Java Basics - Anfänger-Themen 0
C Unterschied Objekte! Java Basics - Anfänger-Themen 13
D Unterschied zwischen double und Double Java Basics - Anfänger-Themen 4
Q Unterschied zwischen static und keinem Modifier Java Basics - Anfänger-Themen 15
A Unterschied Textdatei und Quelltextdatei Java Basics - Anfänger-Themen 5
K Unterschied zwischen Jar, war und ear Dateien Java Basics - Anfänger-Themen 3
R Erste Schritte Unterschied Array-Parameter zu Array als Parameter? Java Basics - Anfänger-Themen 7
V Unterschied Array & ArrayList Java Basics - Anfänger-Themen 13
D Geschwindigkeits unterschied bei import? Java Basics - Anfänger-Themen 13
T Unterschied zwischen Integrationstest und JUnit test? Java Basics - Anfänger-Themen 12
L Unterschied zu C++ Java Basics - Anfänger-Themen 6
A Unterschied JDK SDK Java Basics - Anfänger-Themen 4
L Objekterzeugung Unterschied..? Java Basics - Anfänger-Themen 6
K Unterschied zwischen break und continue in einer Schleife Java Basics - Anfänger-Themen 14
B Klassen Unterschied Konstruktoren. Java Basics - Anfänger-Themen 3
A Exakte Unterschied zwischen Java EE und Java SE? Java Basics - Anfänger-Themen 4
J Unterschied zwischen statische und nicht statische Methoden? Java Basics - Anfänger-Themen 14
S Interface Unterschied: setContentPane() & getContentPane().add Java Basics - Anfänger-Themen 5
Helgon Unterschied runnable und normale jar Java Basics - Anfänger-Themen 6
D Unterschied bidirectional unidirectional Java Basics - Anfänger-Themen 10
F Interface Unterschied von Attributen und Methoden bei abstrakten Klassen und Interfaces Java Basics - Anfänger-Themen 5
O Java unterschied zwischen Interface und Interface_Referenzen!!?? Java Basics - Anfänger-Themen 7
I Unterschied Lizenz EPL und LGPL Java Basics - Anfänger-Themen 7
P Unterschied Windowclosed / WindowClosing Java Basics - Anfänger-Themen 10
J scheduleAtFixedRate scheduleWithFixedDelay Unterschied? Java Basics - Anfänger-Themen 17
S Erste Schritte Grundsatzfragen Unterschied Java / PHP Java Basics - Anfänger-Themen 6
P Unterschied JRE innerhalb/ außerhalb des JDK Verzeichnisses? Java Basics - Anfänger-Themen 5
H printf: Unterschied %f und %g Java Basics - Anfänger-Themen 5
M Unterschied SDK 1.4 und 1.6 Java Basics - Anfänger-Themen 5
S Unterschied java.util.prefs / java.util.Properties Java Basics - Anfänger-Themen 3
J unterschied zwischen awt und swing Java Basics - Anfänger-Themen 6
T Unterschied in Zahlendarstellungen Java Basics - Anfänger-Themen 2
F Unterschied JPanel und JFrame Java Basics - Anfänger-Themen 5
K Unterschied Klassen- und Instanzattribute Java Basics - Anfänger-Themen 4
L Unterschied Konstruktor / Getter Setter Java Basics - Anfänger-Themen 13
S Unterschied Comparable und Comparator Java Basics - Anfänger-Themen 2
C unterschied generische typen und supertypen als methodenparameter Java Basics - Anfänger-Themen 3
J Instanzvariablen - Lokale Variablen - warum der Unterschied? Java Basics - Anfänger-Themen 5
P Unterschied dieser 2 code Zeilen Java Basics - Anfänger-Themen 12
I Datentypen Unterschied in Deklaration von ArrayList Java Basics - Anfänger-Themen 26
G Unterschied e extends y vs ? extends y Java Basics - Anfänger-Themen 5
M Unterschied append / write aus der Klasse Writer Java Basics - Anfänger-Themen 2
M unterschied OutpuStreamWriter und BufferedWriter Java Basics - Anfänger-Themen 5
B Unterschied zwischen String & char Array? Java Basics - Anfänger-Themen 5
J Unterschied Instanzattribut und Referenzvariable Java Basics - Anfänger-Themen 4
J Unterschied bei Schleifen Java Basics - Anfänger-Themen 2
B Was ist der unterschied zwischen Singleton und Strategy? Java Basics - Anfänger-Themen 6
B Variablen: unterschied zwischen Klassen und Instanzvariable Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben