Hat die Java-for-each-Schleife return eine Referenz oder eine Referenz-Kopie?
Ich weiß, dass Java nicht wirklich genaue übergabe per Referenz, sondern als Verweis übergeben kopieren. Dies ist der Grund, warum eine swap-Funktion, die gerade versucht, die swap-Verweise nicht funktionieren würde in Java. Funktioniert eine for-each-Schleife dies tun, wie gut? Zum Beispiel, angesichts des folgenden code...
for (Constraint c : getLeafNodes(constraintGraph)){
c = new Constraint();
}
...Ich will gehen durch eine rekursiv definierte Baum-artige Struktur, und finden Sie alle untergeordneten Knoten. Jeder Blattknoten ersetzt werden muss mit einem neuen, leeren Knoten. Wird das tun, was ich erwarte, dass es, oder wird es einfach eine Kopie der Referenz auf jedes Blatt-Knoten zu einem neuen Knoten?
Schrieb ich eine ähnliche Methode, die auf einem anderen Stück code, dass an unit-tests, das macht mich denke, eine for-each-Schleife verwendet Referenzen, nicht die Referenz kopieren, sondern unsere code-Qualität software markiert diese als tot-store, um eine lokale variable, ein großer Fehler.
Dank.
- Die for-each-Schleife nicht wieder etwas (wem?). Ihre Frage entspricht nicht den Titel.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es nicht tun, entweder. Das ist ähnlich wie zu sagen
Alles, was Sie getan haben ist, ändern, was
c
verweist. Würde dies nicht funktionieren, auch wenn Java unterstützt true pass-by-referenceKurze Antwort: Referenz-Kopie
Beim zuweisen ein iterator ist variabel, es wird nicht weitergegeben an die Sammlung. Finden Sie den iterator als nur-lese-Zugriff auf die Liste.
Java ist die for-Schleife funktioniert genau wie C#'s
for-each
loop, in der diewhile
dieEnumerator
könnenmoveNext
weist der lokalen Variablen derCurrent
elementNein, es wird nicht das tun, was Sie erwarten.
c
ist eine lokale variable bezieht sich/weist auf ein element in der Auflistung zurückgegebengetLeafNodes
. Java hat nicht die Referenz Konzept, das Sie erwähnen, ist alles ein Referenz-Kopie. Wenn Sie wissen, z.B. C oder C++ denken von Objekt-Variablen in java als Zeiger nicht Verweise.