Wie kann ich einen doppelten Wert als Referenz in Java übergeben?
Beispiel:
%Vor%Dieser Code wird gedruckt:
%Vor%und mein Problem ist es zu drucken:
%Vor%mein Ziel: Ich schreibe ein Expertensystem in jess, in dieser Anwendung würde ein Segment einen doppelten Wert für seine Länge haben, jetzt, da der doppelte Wert nicht in einem einzelnen Segment ist; Es ist in vielen anderen Segmenten, Proportionalität Klassen usw., die alle darauf verweisen, warten darauf, zu ändern, so dass sie möglicherweise einige Regeln erfüllen können.
Wenn ich dieses Double nicht ändern kann, kann ich kein bestimmtes Regelfeuer haben, das ein Objekt enthält, das auf diesen doppelten Wert verweist.
Java unterstützt keine Zeiger, so dass Sie nicht direkt auf den Speicher eines Benutzers zeigen können (wie in C / C ++).
Java unterstützt Referenzen, aber Referenzen sind nur Referenzen auf Objekte. Native (integrierte) Typen können nicht referenziert werden. Also, als Sie ausgeführt haben (Autoboxing konvertiert den Code für Sie zu den folgenden).
Doppelt a = neu Doppelt (3.0);
Das bedeutet, wenn Sie
ausführen %Vor%Sie erhalten einen Verweis auf ein Objekt. Wenn Sie sich dafür entscheiden, eine (Autoboxing wird möglicherweise Ihren Code oben zu diesem konvertieren)
%Vor% Dies wirkt sich nicht auf die Referenz von b auf die zuvor erstellte new Double(3.0)
aus. Mit anderen Worten, Sie können die Referenz von b nicht beeinflussen, indem Sie eine direkte manipulieren (oder es gibt keine "Aktion in einer Entfernung" in Java).
Das heißt, es gibt andere Lösungen
%Vor%Die Wrapper-Typen sind in Java unveränderlich. Sobald sie erstellt sind, kann ihr Wert nicht geändert werden (außer durch Reflektionszauber natürlich). Warum versuchst du zu tun, was du tust?
Bearbeiten: Nur um es genauer auszudrücken, wenn Sie:
%Vor%Was tatsächlich passiert, ist etwas wie:
%Vor%Wenn Double änderbar wäre, hättest du etwas wie
machen können %Vor%Sie können natürlich Ihre eigene Klasse schreiben, aber es gibt viele Fallstricke hier, also ist es am besten, Ihr Ziel zu erklären
Sie können versuchen MutableDouble
von commons-lang.
Aber das hat nichts mit Pass-by-Reference zu tun - Sie geben nichts weiter.
@Title selbst: Du kannst nicht ohne "schmutzige" Tricks. Die einfachste Methode besteht darin, ein Array zu übergeben - oder eine Klasse, die das Feld enthält. Änderungen an diesen werden gut wiedergegeben.
Aber Ihr Problem ist etwas ganz anderes: Doppelungen sind unveränderlich, so dass jede Änderung einen neuen Wert ergibt. Du kannst nichts dagegen tun, außer deine eigene Klasse zu implementieren.
Double ist in Java unveränderlich. Die Zuweisung a = 5.0 ändert den doppelten Wert von a nicht. Es erstellt tatsächlich ein völlig neues Double-Objekt und ändert den Wert des Zeigers, den ein Wert für dieses neue Objekt enthält. Wenn Sie den Wert ändern möchten, ohne die Referenz zu ändern, müssen Sie ein veränderliches Double machen.
%Vor%Dann würden Sie a.setValue (5.0) aufrufen; und beide würden sich ändern.
Tags und Links java