Pass-by-value ou Pass-by-reference ?
Bonjour,
Je travaille sur le concept de by-pass-value, et j'ai cru comprendre qu'assigner une variable de type objet ou primitive en paramètre d'une méthode dans un caller ne modifiait pas la variable en question. N'étant peut-être pas clair, voici un exemple
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| public static void inversValue(int x, int y) {
int c= x;
x=y;
y=c;
}
public static void main(String[] args) { //caller
int a = 1;
int b = 2;
inversValue(a, b);//On passe des variables en paramètre dont les valeurs ne seront pas affectés grace au principe du pass-by-value
System.out.println(a);
System.out.println(b); // pas de soucis on récupère nos int initiaux
} |
Je réfléchis sur ce problème depuis quelques temps sans comprendre pourquoi StringBuiler s2 renvoie "s2b" et non pas "s2". s2 possède une valeur dans la méthode work() qui ne devrait pas impacter le retour du caller non ? Est-ce dû au fait que la classe StringBuilder est mutable ?
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| public static StringBuilder work(StringBuilder a, StringBuilder b) {
a = new StringBuilder("a");
b.append("b");
return a;
}
public static void main(String[] args) {
StringBuilder s1 = new StringBuilder("s1");
StringBuilder s2 = new StringBuilder("s2");
StringBuilder s3 = work(s1, s2);
System.out.println("s1 = " + s1);//renvoie s1
System.out.println("s2 = " + s2);//renvoie s2b
}
} |
Merci