Ist Java "pass-by-reference" oder "pass-by-value"?

Ich dachte immer, Java war pass-by-reference.

Jedoch, ich habe gesehen, ein paar blog-posts (zum Beispiel, dieser blog), die behaupten, dass es nicht so ist.

Ich glaube nicht, ich verstehe die Unterscheidung, die Sie machen.

Was ist die Erklärung?

Ich glaube, dass viel von der Verwirrung über diese Frage hat mit der Tatsache zu tun, dass unterschiedliche Menschen haben unterschiedliche Definitionen des Begriffs "Referenz". Besucher aus einem C++ - hintergrund davon ausgehen, dass "Referenz" muss bedeuten, was es bedeutete, in C++, Menschen aus einem C-hintergrund übernehmen "Referenz" muss die gleiche sein, wie "Zeiger" in Ihrer Sprache, und so weiter. Ob es korrekt ist zu sagen, dass Java geht durch die Referenz hängt wirklich davon ab, was ist gemeint mit "Referenz".
Ich versuche, Sie zu nutzen konsequent die Terminologie gefunden auf Evaluation-Strategie Artikel. Es sollte angemerkt werden, dass, obwohl die Artikel Punkte out die Bedingungen variieren je nach Gemeinschaft, es betont, dass die Semantik für call-by-value und call-by-reference unterscheiden sich in einer sehr entscheidenden Art und Weise. (Ich persönlich bevorzuge, um mit call-by-object-sharing in diesen Tagen über call-by-value[-of-the-reference], als dies beschreibt die Semantik auf einem hohen Niveau und nicht zu Konflikten mit call-by-value, was ist die zugrunde liegende Implementierung.)
Können Sie gehen und setzen Sie Ihren Kommentar auf einem RIESIGEN billboard, oder was? Das ist das ganze Problem in einer nussschale. Und es zeigt, dass diese ganze Sache ist Semantik. Wenn wir nicht damit einverstanden sind, auf der Basis der definition einer Referenz wird, dann werden wir nicht einig über die Antwort auf diese Frage 🙂
Ich denke, die Verwirrung ist "pass by reference" versus "Referenz-Semantik". Java ist pass-by-value mit Referenz-Semantik.
während Sie absolut richtig, die Leute kommen von C++ instinktiv eine andere intuition hinsichtlich der Begriff "Referenz -", ich persönlich glaube, der Körper ist mehr begraben in der "von". "Vorbei" ist verwirrend, es ist absolut Verschieden von "Vorbei" in Java. In C++, allerdings ist es umgangssprachlich nicht. In C++ kann man sagen, "übergabe einer Referenz", und es ist so verstanden, dass es passieren swap(x,y) test.

InformationsquelleAutor |

Schreibe einen Kommentar