übergeben Array durch Referenz in Java

7

Ist es in Ordnung, ein Array als Argument in Java wie dieses int[5] &result zu übergeben? Ich möchte den Verweis auf das Array übergeben, weil ich das Array in der aufrufenden Funktion ändern möchte. Was wäre die Syntax?

    
maryam 27.12.2012, 22:28
quelle

5 Antworten

28
%Vor%

Arrays sind Objekte in Java. Und Verweise auf Objekte werden nach Wert übergeben.

    
JB Nizet 27.12.2012 22:31
quelle
14

In Java wird ein Array nach Wert übergeben, aber der Wert ist ein Verweis auf ein Array. Angenommen, Sie haben ein Array arr . Wenn Sie es übergeben, können Sie das Array ändern, auf das arr verweist, aber Sie können nicht ändern, auf welches Array arr verweist. d. h. innerhalb einer Methode können Sie das referenzierte Objekt ändern, aber Sie können die übergebene Variable, die immer noch eine Referenz auf dasselbe Objekt darstellt, nicht ändern. Ich werde versuchen, mit einem Beispiel zu veranschaulichen:

%Vor%

Ausgabe:

%Vor%

Sie können aus dem Beispiel sehen, dass First Second in der Ausgabe statt in Second First erhalten wird. Dies liegt daran, dass in der Funktion swap Kopien verwendet wurden, die keinen Einfluss auf die Referenzen im Hauptteil haben. Dies veranschaulicht die Tatsache, dass Sie die übergebene Variable nicht ändern können, die immer noch eine Referenz auf das gleiche Objekt sein wird. Die Funktion change bringt jedoch den gewünschten Effekt, weil Sie das referenzierte Objekt ändern können.

Weitere Informationen finden Sie hier:
Ist Java "pass-by-reference"?

    
bane 27.12.2012 22:34
quelle
4

Java ist nach Wert. Diese Referenz wird als Wert übergeben, der kopiert wird. Es zeigt immer noch auf das ursprüngliche Array.

%Vor%     
RNJ 27.12.2012 22:30
quelle
0

Könnte Ihr Funktionsparameter eine Liste akzeptieren?

Die statische Methode asList von java.util.Arrays sollte eine Liste zurückgeben, die das Array als Speicher verwendet.

%Vor%

Ich werde das später wiederholen.

    
cavila 27.12.2012 22:45
quelle
0

Das könnte eine unpopuläre Art sein, darüber nachzudenken, aber selbst von einer C / C ++ Seite zu sein, hat es mir leichter gemacht.

In Java sind Objekte Referenztypen . Das bedeutet, dass sich das tatsächliche Objekt irgendwo auf dem Heap befindet und dass Sie tatsächlich nur eine Referenz für dieses Objekt verwenden. Daher ist es einfacher, es in Form von C-Zeigern (als Analogie) zu denken.

%Vor%

würde sich ähnlich wie in C / C ++

verhalten %Vor%

Ähnlich verhalten sie sich bei Funktionen so, als würden die Parameter der Funktion als Zeiger übergeben. Ähnlich wie Sie Pass-by-Reference in C

simulieren würden %Vor%

Ist mehr wie die unten stehende C-Version

%Vor%

und solange Sie den Wert des Zeigers selbst nicht ändern (in Java durch Neuzuweisen der Variablen mit einer neuen Instanz), können Sie damit auf die ursprüngliche Instanz zugreifen und diese ändern.

Und um alles zusammenzufassen, sind ALLE Typen außer den primitiven Typen ( int , double , boolean usw.) Referenztypen (sogar Typen wie Integer , Double , Boolean und Arrays)

Wie andere bereits erklärt haben, müssen Sie nicht das & hinzufügen, damit es sich so verhält, wie Sie es erwarten würden (mit Ausnahme bestimmter Vorbehalte wie die Zuweisung mit einer neuen Instanz)

    
Karthik T 27.12.2012 22:50
quelle

Tags und Links