Gibt an, ob Java-Argumente als Wert oder als Referenz übergeben werden

Um ehrlich zu sein, spielt es keine Rolle, ob Sie es wissen oder nicht, aber es geht darum, wie Sie Java-Argumente übergeben.

Java wird oft als Referenzübergabe bezeichnet, aber ich hatte keinen Hunger und war verwirrt ich habe C ++ studiert. Ich hatte das Gefühl, dass sich der Nebel verzogen hatte, also schrieb ich einen Artikel.

Auch hier spielt es keine Rolle, ob Sie wissen oder nicht, ob Sie auf Java beschränkt sind.

Für primitive Typen

	public static void main(String[] args) {

		int a = 1;
		int b = 2;

		System.out.println("Before swap");
		System.out.println("a = " + a);
		System.out.println("b = " + b);

		swap(a, b);

		System.out.println("After swap");
		System.out.println("a = " + a);
		System.out.println("b = " + b);
	}

	static void swap(int x, int y) {
	
		System.out.println("In swap");
	
		int t = x;

		x = y;
		y = t;

		System.out.println("x = " + x);
		System.out.println("y = " + y);
	}

Ausgabe


Before swap
a = 1
b = 2
In swap
x = 2
y = 1
After swap
a = 1
b = 2

Die `swap``` Methodenargumente` x, y``` sind Kopien des Aufrufers a, `` `b``` und sind verschiedene Entitäten. ist. Daher wirkt sich das Austauschen der Werte von "x" und "y" in der "Swap" -Methode nicht auf den Anrufer aus.

Dies ist das Übergeben des Wertes durch den Wert.

Für Objekte

	public static void main(String[] args) {

		Integer c = new Integer(1);
		Integer d = new Integer(2);

		System.out.println("Before swap");
		System.out.println("c = " + c);
		System.out.println("d = " + d);

		swap(c, d);

		System.out.println("After swap");
		System.out.println("c = " + c);
		System.out.println("d = " + d);
	}

	static void swap(Integer x, Integer y) {

		System.out.println("In swap");

		Integer t = x;

		x = y;
		y = t;

		System.out.println("x = " + x);
		System.out.println("y = " + y);
	}

Ausgabe


Before swap
c = 1
d = 2
In swap
x = 2
y = 1
After swap
c = 1
d = 2

Das Ergebnis ist das gleiche wie beim primitiven Typ, auch wenn die Werte in der `swap``` -Methode ausgetauscht werden, wird der Wert des Aufrufers nicht ausgetauscht. ```swap```Ein Verweis auf eine Instanz der Integer-Klasse wird als Argument an die Methode übergeben. Die an das Argument übergebene Referenz ist jedoch eine ** Kopie der Referenz ** beim Aufrufer, wie dies beim primitiven Typ der Fall ist. Das heißt, selbst wenn die swap``` -Methode die Referenzen gegen x``` und y``` austauscht, werden die Aufrufer`` a``` und `` b``` Der Verweis auf bleibt unverändert. Dies bedeutet, dass `` Referenzen als Wert`` `übergeben werden.

Aber im Fall eines Objekts wird die Referenz als Argument übergeben, also ist es in Ordnung, die Referenz zu übergeben, oder?

Der Rest ist eine Seite.

Ich denke, es geht darum, eine Referenz im engeren Sinne zu übergeben und wahrscheinlich eine Referenz in C ++ als Argument zu übergeben.

Ich erinnere mich jedoch, dass ich das Argument als Wert und als Referenz übergeben habe, selbst wenn ich vor einiger Zeit in die C-Sprache gebissen habe, und ich denke, dass ich die C-Sprache als Referenz übergeben und den Zeiger als Argument übergeben habe. Genau genommen ist dies jedoch auch ein "Zeiger-Pass-by-Wert".

Um ehrlich zu sein, ist der Kontext in der C-Sprache mehrdeutig, aber wenn es einen Kontext gibt, in dem "Zeiger nach Wert" als Referenz übergeben wird, können sogar Java-Objekte als Übergabe als Referenz bezeichnet werden. Abwesend?

Ihre eigene Schlussfolgerung

Genau genommen wird Java als Wert übergeben. Um das Missbräuchliche zu sagen, ist es nicht falsch zu sagen, dass es als Referenz übergeben wird.

Was ist wirklich wichtig

Unabhängig davon, ob es als Wert oder als Referenz übergeben wird, muss diese Referenz für Java übergeben werden, wenn sie an ein Objektargument übergeben wird.

Da die Richtung der Referenz im Aufrufer der Methode und in der Methode gleich ist, kann der Aufrufer nachteilig beeinflusst werden, wenn das Objekt durch die Referenz in der Methode manipuliert wird.

Recommended Posts

Gibt an, ob Java-Argumente als Wert oder als Referenz übergeben werden
So ändern Sie das Argument in der [Java] -Methode (für diejenigen, die durch Übergabe von Werten, Übergeben von Referenzen, Übergeben von Referenzen verwirrt sind)
Java "Pass by Reference" Problemzusammenfassung
Gibt an, ob Java Comparable oder Comparator verwendet werden soll
[Java] Das Referenzwort ist schlecht!