/ / Java: Arrays als Referenztypen, in Methoden - Java, Pass-by-Value, lokale Variablen

Java: Arrays als Referenztypen, in Methoden - Java, Pass-by-Value, lokale Variablen

Ich gehe von C ++ nach Java und habe ein Problem damit zu verstehen, wie ein Array in Java außerhalb der Methode, in der es erstellt wurde, dauert. Sehen Sie sich diesen einfachen Code unten an:

public static int[] arrayMethod(){
int[] tempArray = {1, 2, 3, 4};
return tempArray;
}

public static void main(String[] args){
int arr[] = arrayMethod();
for(int i : arr){
System.out.println(i);
}
}

In C ++, außer das Array wird dynamisch mit dem zugewiesen new Operator, das Array würde nicht nach dem existierenAufruf, weil es lokal in der Methode erstellt wurde. Wie ich es verstehe, wird Java immer als Wert übergeben, und Arrays sind Referenztypen, so dass meine C ++ - Logik mir sagen würde, dass ich einen Verweis auf ein lokal erstelltes Array zurückgebe. Was vermisse ich?

Antworten:

4 für die Antwort № 1

Vielleicht hilft dir das, das zu verstehen.

In Java:

int[] tempArray = {1, 2, 3, 4};

meint genau das Gleiche:

int[] tempArray = new int[]{1, 2, 3, 4};

Da ist ein implizit new in der ersten Form.

In Java sind alle Arrays Heap-Objekte / Referenzen. Und wenn ein Array an eine Methode übergeben wird, wird es genauso gehandhabt wie jede Referenz; d.h. die Referenz wird als Wert übergeben. (Und nein, das ist NICHT "call by reference" oder "pass by reference", da diese Begriffe richtig verstanden werden.)


1 für die Antwort № 2

Da Sie einen Verweis auf das Array zurückgebenwas Sie dann int arr [] zuweisen, das Array zeigt immer noch etwas darauf hin. Der Müllsammler kann es also nicht aussortieren, weil es immer noch eine Referenz hat.

Es war eine lokale Variable, aber dann haben Sie sie an Ihre Hauptmethode zurückgegeben und ihr eine Variable zugewiesen, so dass das Array bestehen bleibt.


1 für die Antwort № 3

Der Verweis auf das Array wird als Wert übergeben. Also, was Sie haben, sind 2 Referenzen. Sie erhalten einen Verweis auf das Array nach Wert. Solange also die Referenz auf das Array zeigt, können Sie das Array verändern (etwas manipulieren).

Wenn Sie nun zwei Referenzen hätten, die auf denselben verweisenWenn ein Array das Array durch eine Referenz ändert, wird dasselbe Array geändert. Aber wenn Sie irgendwann den Wert der Referenz ändern (d. H. Das Array ändern, auf das die Referenzpunkte zeigen), dann zeigen diese beiden Referenzen auf unterschiedliche Arrays.

Wichtiger Hinweis: Hier wird eine Referenz als Wert zurückgegeben. Nicht Array wird mit dem Zeiger zurückgegeben. Kurz gesagt, Sie haben Recht. Ich habe eigentlich wenig Verständnis von C ++

Es ist so, als ob es zwei Fernbedienungen für ein Fernsehgerät gibt. Wenn Sie jedoch eine Fernbedienung so ändern, dass sie auf ein anderes Fernsehgerät zeigt, kann die erste Fernbedienung weiterhin auf das alte Fernsehgerät zugreifen.


-1 für die Antwort № 4

In Java, Objekte werden als Referenz übergeben und Werte werden nach Wert übergeben. Arrays sind Objekte, die als Referenz übergeben werden. Mit Pass-by-Reference erhalten Sie Pointer-Effekte.