java - Übergabe eines doppelten Wertes als Referenz

8

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.

    
Ouais 21.04.2011, 20:06
quelle

6 Antworten

5

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%     
Edwin Buck 21.04.2011 20:16
quelle
4

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

    
Java Drinker 21.04.2011 20:10
quelle
3

Sie können versuchen MutableDouble von commons-lang.

Aber das hat nichts mit Pass-by-Reference zu tun - Sie geben nichts weiter.

    
Bozho 21.04.2011 20:13
quelle
1

@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.

    
Voo 21.04.2011 20:09
quelle
1

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.

    
Affe 21.04.2011 20:15
quelle
0

Sie können nicht. In Java können Sie nicht den Weg (nach Wert / durch Ref) wählen, durch den Parameter an eine Methode übergeben werden.

    
kunal 21.04.2011 20:12
quelle

Tags und Links