Pour être honnête, peu importe que vous le sachiez ou non, mais il s'agit de savoir comment transmettre les arguments Java.
Java est souvent désigné comme passant par référence, mais je n'avais pas faim et j'étais confus j'étudiais le C ++. J'ai senti que le brouillard s'était dissipé, j'ai donc écrit un article.
Encore une fois, peu importe si vous savez ou ne savez pas si vous êtes limité à Java.
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);
}
production
Before swap
a = 1
b = 2
In swap
x = 2
y = 1
After swap
a = 1
b = 2
Les arguments de méthode
swap `` `x``,` `y
sont des copies de l'appelant
ʻa,` `b
et sont des entités différentes. est. Par conséquent, permuter les valeurs de x``` et
y dans la méthode` `` swap
n'affecte pas l'appelant.
Il s'agit de `` passer la valeur par valeur ''.
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);
}
production
Before swap
c = 1
d = 2
In swap
x = 2
y = 1
After swap
c = 1
d = 2
Le résultat est le même que le type primitif, même si les valeurs sont permutées dans la méthode swap '', la valeur de l'appelant n'est pas permutée. ```swap```Une référence à une instance de la classe entière est transmise à la méthode en tant qu'argument. Cependant, la référence passée à l'argument est une ** copie de la référence ** chez l'appelant, comme c'est le cas avec le type primitif. Autrement dit, même si la méthode
swap``` échange les références pour
x``` et
y, les appelants
a et `` `b
La référence à est inchangée.
Cela signifie que
la référence est passée par valeur` ``.
Le reste est un aparté.
Je pense que passer une référence au sens strict est probablement une référence en C ++ comme argument.
Cependant, je me souviens avoir passé l'argument par valeur et passer par référence même lorsque je mordais le langage C il y a un peu longtemps, et je pense que passer le langage C par référence et passer le pointeur comme argument. Cependant, à proprement parler, il s'agit également de passage du pointeur par valeur ''
.
Pour être honnête, le contexte en langage C est ambigu, mais s'il existe un contexte de passage de `` pointeur par valeur '' par référence, même les objets Java peuvent être appelés passant par référence. Absent?
Strictement parlant, Java est passé par valeur. Cependant, pour dire le truc abusif, il n'est pas faux de dire qu'il est passé par renvoi.
Qu'elle soit passée par valeur ou par référence, pour Java, cette référence doit être transmise lorsqu'elle est passée à un argument d'objet.
Comme la direction de la référence est la même dans l'appelant de la méthode et dans la méthode, si l'objet est manipulé via la référence dans la méthode, l'appelant peut être affecté.
Recommended Posts