JavaRush /Java-Blog /Random-DE /Übergabe von Parametern in Java
vincent_vega
Level 24
Gainesville

Übergabe von Parametern in Java

Veröffentlicht in der Gruppe Random-DE
Eine Variable in Java ist ein Container mit einem Wert darin. Was bedeutet es also, eine Variable zu „übergeben“? Und was ist der Unterschied zwischen primitiven und Referenzdatentypen?
Übergabe von Parametern in Java - 1
Dazu kommen wir später. Beginnen wir zunächst mit einer einfachen Aufgabe. Was dieser Code bewirkt:
int х = 3;
int у = х;
In Zeile 1 wird eine Variable x vom Typ int erstellt und ihr der Wert 3 zugewiesen. In Zeile 2 wird eine Variable y vom Typ int erstellt und ihr der Wert der Variablen x zugewiesen . Zukünftig hat die Variable x keinen Einfluss auf y . Java kopiert den Wert von x (3) und platziert diese Kopie in y . Dabei wird ein Parameter als Wert übergeben. Sie schreiben nicht eine Variable in eine andere. Der Wert wird kopiert und einer neuen Variablen zugewiesen. Ausdruck y = x; Bedeutet NICHT „ x nach y schreiben “. Es bedeutet „den Wert in x kopieren und diese Kopie nach y schreiben “. Wenn ich später y ändere :
у = 34;
Wird sich das auf x auswirken ? Natürlich nicht. x hat immer noch den Wert 3. Wenn ich x später ändere :
х = 90;
Wie wird sich das auf Sie auswirken ? Auf keinen Fall. Nach erfolgter Zuweisung (KOPIEREN des Werts) stehen sie in keinerlei Zusammenhang mehr. Was ist mit Referenztypen? Wie arbeiten Sie? Gar nicht so schwer, tatsächlich gilt die gleiche Regel. Links bewirken dasselbe: Sie erhalten eine Kopie des Links. Wenn ich also sage:
Cat A = new Cat ();
Cat B = A;
Link A wird auf Link B kopiert. Dies gilt nicht für das Objekt – Sie haben immer noch nur ein Objekt. Aber jetzt haben Sie zwei verschiedene Referenzen, die dasselbe Cat- Objekt steuern . Schauen wir uns nun die Übergabe von Parametern an Methoden an. Java übergibt Parameter nach Wert. Stets. Dies bedeutet „Kopieren Sie den Wert und übergeben Sie die Kopie.“ Für primitive Typen ist es einfach:
int х = 5;
doStuff (х); / / Передать копию х (Bedeutung 5) в метод doStuff
Die doStuff- Methode sieht folgendermaßen aus:
void doStuff (int у) {

   / / Действия с 'y'
}
Eine Kopie des Werts von x , also 5, wird an die Methode doStuff() übergeben . Die doStuff()- Methode verfügt über eine eigene Variable namens y . Die y- Variable ist eine neue, andere Variable. Mit einer Kopie dessen, was zum Zeitpunkt der Übergabe an die Methode in x war. Von nun an haben y und x keinen Einfluss mehr aufeinander. Wenn Sie y ändern , hat dies keinen Einfluss auf x .
void doStuff (int у) {

   у = 27; / / Это не влияет на 'х'
}
Und umgekehrt – wenn Sie x ändern , ändern Sie y nicht . Das Einzige, was x in diesem Fall tat, war, seinen Wert zu kopieren und an die doStuff()- Methode zu übergeben . Wie funktioniert „Wertübergabe“ mit Referenzen? Zu viele Leute sagen: „Java übergibt primitive Typen nach Wert und Objekte nach Referenz.“ Es ist nicht das, was sie sagen. Java übergibt alles als Wert. Mit Primitiven erhalten Sie eine Kopie des Inhalts. Mit Links erhalten Sie auch eine Kopie des Inhalts. Doch welchen Inhalt hat der Link? Fernbedienung. Einrichtungen zur Verwaltung/Zugriff auf die Einrichtung. Wenn Sie einer Methode einen Verweis auf ein Objekt übergeben, übergeben Sie eine Kopie des Verweises. Klon der Fernbedienung. Das Objekt liegt immer noch auf dem Stapel, auf dem es erstellt wurde, und wartet darauf, dass jemand die Fernbedienung benutzt. Der Einrichtung ist es egal, wie viele Fernbedienungen zur Steuerung „programmiert“ sind. Die einzigen Leute, die sich darum kümmern, sind der Garbage Collector und Sie, der Programmierer. Wenn Sie also sagen:
Cat A = new Cat ();
doStuff (А);

void doStuff (Cat B) {

   / / Использование B
}
Es gibt nur ein Cat- Objekt . Aber jetzt können zwei Fernbedienungen (Links) auf dasselbe Cat- Objekt zugreifen . Alles, was B nun mit dem Cat- Objekt macht, wirkt sich also auf die Cat aus , auf die A zeigt , aber nicht auf den Inhalt von A ! Sie können Cat über den neuen Link B (direkt von A kopiert) ändern, A jedoch nicht. Was zur Hölle bedeutet das? Sie können das Objekt ändern, auf das A verweist , aber Sie können die Referenz von A nicht ändern – leiten Sie es auf ein anderes Objekt oder null um . Wenn Sie also die Referenz von B ändern (nicht das eigentliche Cat- Objekt , auf das B verweist , sondern den Wert der Referenz selbst), ändern Sie nicht den Wert von A . Umgekehrt. Also:
Cat A = new Cat ();
doStuff (А);

void doStuff (Cat B) {

   B = new Cat (); / / Не повлияет на ссылку A
}
Es bedeutet einfach, dass B auf ein anderes Objekt zeigt. A ist immer noch glücklich. Also wiederholen Sie es nach mir: Java übergibt alles als Wert. (Okay, noch einmal ... mit Gefühl.) Java übergibt alles als Wert. Bei primitiven Typen übergeben Sie eine Kopie des aktuellen Werts, bei Objektreferenzen übergeben Sie eine Kopie der Referenz (Fernsteuerung). Sie passieren das Objekt nie. Alle Objekte werden auf dem Heap gespeichert. Stets. Bereiten Sie jetzt eine kräftige Tasse Kaffee zu und schreiben Sie etwas Code! Originaler Artikel.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION