Kann ich den Verweis innerhalb einer Methode mit dieser Referenz als Argument in Java ändern?

8
%Vor%

Wie kann ich die Ausgabe von "new string" mit s als only-Argument für die Methode changeString machen?

danke.

    
Jichao 22.12.2009, 14:11
quelle

9 Antworten

10

In Java werden Argumente nach Wert übergeben, Objektargumente übergeben einen Verweis auf das Objekt. Dies bedeutet, dass Sie die Referenz des Arguments ändern können, aber das Objekt, an das Sie die Referenz übergeben haben, nicht ändert. Sie haben zwei Möglichkeiten, das neue Objekt zurückzugeben (bevorzugt) oder den Verweis an einen Container zu übergeben, der die neue Referenz (Sammlung, Array usw.) erhalten kann. Beispiel:

%Vor%     
rsp 22.12.2009, 14:17
quelle
5

Referenzen in Java werden von value übergeben. Selbst wenn Sie den Verweis in der Funktion ändern, werden Änderungen nicht in die aufrufende Funktion zurückreflektiert, da das, was Sie innerhalb der Funktion ändern, nur a ist Kopie der Originalreferenz nicht die Originalreferenz selbst.

Sie können jedoch die neue Zeichenfolge von Ihrer changeString-Methode zurückgeben, anstatt zu versuchen, die Referenz dort (innerhalb der Funktion) selbst zu ändern.

    
Prasoon Saurav 22.12.2009 14:14
quelle
4

Nur wenn Sie die Funktion

machen %Vor%

String ist unveränderlich, und Java hat kein Konzept eines "Verweises auf eine Referenz" als Datentyp der ersten Klasse. Wenn Ihnen das oben genannte nicht gefällt, können Sie eine kleine Klasse mit einem einzelnen String-Feld erstellen.

    
bmargulies 22.12.2009 14:14
quelle
2

Sie können natürlich die neue Zeichenfolge von Ihrer changeString-Methode zurückgeben, anstatt zu versuchen, sie vor Ort zu ändern.

Alternativ können Sie ein Objekt erstellen, das eine Zeichenfolge umschließt oder enthält und diese übergeben. Die ChangeString-Methode würde die interne Zeichenfolge für Ihr Objekt ändern, und die Hauptmethode würde weiterhin einen Verweis auf dieses Objekt enthalten.

Andernfalls können Sie dies nicht tun. String ist unveränderlich, und Java übergibt Objekte immer als Wert, der ein Zeiger auf ein bestimmtes Objekt ist. Ändern Sie, wo Sie zeigen, und Sie verweisen nicht mehr auf das gleiche Objekt.

    
Jacob Mattison 22.12.2009 14:16
quelle
2

A : Sie können in Java-Objektreferenzen keinen Wert übergeben.

Wenn Sie das wirklich brauchen, können Sie einen Wrapper erstellen gefällt dir und benutze es so, wie du es erwartet hast:

%Vor%     
OscarRyz 22.12.2009 14:15
quelle
1

Strings sind in Java unveränderlich und Parameter werden als Wert übergeben, so dass Sie sie nicht ändern können (es gibt keine Entsprechung zu ref in C #). Sie können ein StringBuilder übergeben und den Inhalt genauso einfach ändern.

    
rui 22.12.2009 14:16
quelle
0

Dies ist in Java nicht möglich, da alles in Java nach Wert übergeben wird. In diesem Fall, bei dem das Argument eine Objektreferenz ist, ist es der Wert der Referenz, der an die Methode übergeben wird, nicht die Referenz selbst.

    
Mark 22.12.2009 14:15
quelle
0

Java erlaubt keine Parameter wie C #, so dass Sie es nicht tun werden in der Lage, dies als solches zu erreichen.

    
Victor Nicollet 22.12.2009 14:16
quelle
0

Es ist hässlich, aber Sie könnten den String in global static ändern:

%Vor%     
Ljdawson 22.12.2009 14:20
quelle

Tags und Links