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