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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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
Partager