Tauschen von Objekten in Java

8

Ich habe studiert, dass Java durch Verweis passiert, aber wenn ich folgenden Code ausführe, werden die Zeichenfolgen in Hauptmethode warum nicht vertauscht?

%Vor%     
sabu 28.07.2012, 09:49
quelle

8 Antworten

7

Du hast falsche Quellen studiert. Java ist pass-by-Wert. Hier ist eine Quelle mehr, die Sie studieren können. Und von hier finden Sie eine Diskussion über ein ähnliches Beispiel.

    
Mikko Maunu 28.07.2012, 09:51
quelle
7

1. In erster Linie, Java ist pass by Value . (dh Vorübergehender Kopiervorgang ).

2. Sie geben das reference Nicht das Objekt an die Methode weiter.

>

Beispiel:

%Vor%

Der obige Code soll nicht zeigen, wie Swapping durchgeführt wird, sondern um einen wichtigen Punkt sichtbar zu machen.

  • Wenn die Methode go(String s) aufgerufen wird, indem ein Argument "a", das ein Object reference variable vom Typ String ist, an den Parameter "s" übergeben wird, der auch ein Object reference variable vom Typ String, ist nur der Verweis, der von Value / Copy übergeben wird.

  • Alle Änderungen am reference wirken sich auf das String-Objekt auf dem Heap, NICHT the reference .

  • aus
Kumar Vivek Mitra 28.07.2012 11:08
quelle
2

Was an eine Methode übergeben wird, ist eine Kopie der Referenz des Objekts. Unabhängig davon, wie oft Sie die Referenzen neu zuweisen, wird die ursprüngliche Referenz nicht beeinflusst.

Versuchen Sie Folgendes:

%Vor%

Die folgende Methode würde jedoch für das übergebene Originalobjekt keinen Unterschied machen.

%Vor%     
adarshr 28.07.2012 09:51
quelle
1

Java übergibt die Referenzen immer nach Wert. Lesen Sie diese Antwort , um weitere Informationen zu erhalten. Sie können jedoch zwei Zeichenfolgen über Arrays oder Wrapperklassen austauschen.

BEARBEITEN:

@dasblinkenlight zeigt, wie man mit Arrays zwei Strings vertauscht, und hier ein Beispiel für die Verwendung der Wrapperklasse:

%Vor%

%Vor%

AUSGABE:

%Vor%     
Eng.Fouad 28.07.2012 09:55
quelle
1

Java übergibt Referenzen nach Wert; Das Vertauschen von Verweisen in der aufgerufenen Methode hat keine Auswirkungen auf den Aufrufer. Ihre Zeichenfolgen sind unveränderlich. Sie können also in der Methode swap , die für den Aufrufer sichtbar wäre, nichts mit ihnen tun.

Wenn Sie jedoch veränderbare Objekte übergeben, werden Sie sehen, dass Änderungen an ihnen, die in swap vorgenommen wurden, sich im Original widerspiegeln:

%Vor%

Dies funktioniert, weil das Array veränderbar ist (d. h. Änderungen an seinem Zustand vorgenommen werden können) und weil ein Verweis auf das ursprüngliche Objekt an die aufgerufene Funktion übergeben wird (nach Wert). Wenn swap den Inhalt von a ändert, wird auch der Inhalt von a im Aufrufer geändert, da es sich um dasselbe Objekt handelt.

    
dasblinkenlight 28.07.2012 09:51
quelle
0
%Vor%     
Om Deshmukh 03.06.2015 11:16
quelle
0

Java wird streng nach Wert übergeben.

Lassen Sie uns Ihren Code wie folgt unter dem Gesichtspunkt der Erklärung ändern:

%Vor%

}

S1 und S2 sind die Referenzen, die die Adresse des String-Objekts enthalten. Für zB: S1 = 123, S2 = 234

Wenn wir die swap-Methode aufrufen, wird eine Kopie von S1 und S2 erstellt und str1 und str2 zugewiesen.

Was str1 = 123 und str2 = 234 ist.

Die Swap-Methode tauscht nur die in str1 und str2 vorhandenen Werte aus. (str1 = 234 str2 = 123), während S1 und S2 immer noch auf den gleichen Speicherplatz zeigen.

Dies ist der Grund, warum der Swap nicht in der Hauptmethode reflektiert wird.

    
S.Asha 01.06.2017 06:49
quelle
-2

Wir können Objekte austauschen. Es ist so einfach. Sie müssen nur ein Dummy-Objekt verwenden, um zwei Objekte zu tauschen.

Beispiel ist unten angegeben:

%Vor%     
Ashish Nijai 13.04.2014 19:39
quelle

Tags und Links