2016-05-10 9 views
-4

Ich weiß ganz klar, dass Java pass-by-value ist und habe keine Zweifel daran, aber ich möchte wissen, warum eine moderne Sprache wie Java keine Pass-by-Referenz bekam? Ich meine, was sind die Auswirkungen auf das Design? Es ist eine Designbeschränkung oder ist beabsichtigt? und offensichtlich warum.Warum ist Java pass-by-value?

Dank

EDIT: Ich weiß, dass Java-Anwendung Pass-by-Wert und Ich verlangen nicht, dass etwa. Ich habe schon viele Fragen gelesen und das ist keine doppelte Frage.

+0

warum die downvotes? vor der Wahl erklären plz. – holyknight

+2

Mögliches Duplikat von [Ist Java "pass-by-reference" oder "pass-by-value"?] (Http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass -by-value) –

+0

Ich habe diese Frage schon gelesen und noch mehr, aber ich konnte immer noch keine Antwort auf meine Frage finden. – holyknight

Antwort

3

Sie möchten vielleicht http://www.stroustrup.com/1995_Java_whitepaper.pdf lesen. Es enthält keine direkte Antwort auf diese Frage, aber es betont viel "Einfachheit". Pass durch Bezugnahme einiger Komplikationen hinzu:

  • Sie Konzept des lokalen Stapelzeigers in Bytecode müssen, die es erheblich erschwert, wenn Sie 100% sicher
  • lokale Stack-Variablen mit Bezug auf verschiedene Threads auslaufen könnten bleiben wollen, Das erfordert ein spezifisches Speichermodell-Verhalten für sie, wieder eine zusätzliche Komplikation. (und frühes Java ging es um einfache, nebenwirkungsfreie Zuweisungen, ohne komplexe Konzepte - wir wissen, wie dies mit Generika und Autoboxing ging) später ...)

All das, mit der Tatsache, dass Sie es trivial mit explizit mutierbarer Wrapper-Klasse (oder sogar Ein-Element-Array) emulieren können, hat es sich nicht lohnt, in frühen Versionen aufzunehmen. Danach ... wahrscheinlich nur Trägheit.

Für mich persönlich, würde eine Art einfache Multiple-Return-Anweisung (Tupel oder so ähnlich) viel mehr gut, dass Pass-by-Referenz, die in den meisten Fällen verwendet wird, nur um (und Sie am Ende mit dem nicht symmetrischen Fall, dass ein Wert normal zurückgegeben wird, und anderen durch "Ausgabe" -Variablen. Aber mit einfachen Wrapper-Klassen können Sie dasselbe auch expliziter (und ausführlicher, also Java Way (tm)) erreichen.

+0

Danke Kumpel. Gute Antwort. Ich habe nach solchen "Design-Implikationen" gesucht. – holyknight

Verwandte Themen