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