Exercice JAVA passage de parametres
Rédigé par GC Team, Publié le 17 Août 2010, Mise à jour le Samedi, 17 Décembre 2022 18:08Participez au vote ☆☆☆☆☆★★★★★
But:
|
Que veut dire qu'une référence est passée par valeur ? | |||
Thème:
|
Passage de parametres | |||
Soit le programme suivant :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
class ConcatIncorrecte { public static void main(String[] args) { String s = "China Blue"; System.out.println(s); concat(s, " Express"); System.out.println(s); } public static void concat(String s, String s2) { s +=s2; } } |
- Expliquez pourquoi la méthode concatener ne parvient pas à modifier la chaîne s du main (en y concaténant " Express")
- Corriger le codage de la méthode concatener et son utilisation dans le main de sorte à ce que l'exécution du programme affiche :
China Blue China Blue Express
au lieu de :China Blue China Blue
Fichiers:
|
ConcatIncorrecte.java |
Les explications et la correction sont données dans le code ci-dessous :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
class ConcatIncorrecte { public static void main(String[] args) { String s = "China Blue"; System.out.println(s); //version incorrecte //concatener(s, " Express"); // version correcte: s = concatener(s, " Express"); System.out.println(s); } /*les raisons du comportement incorrect sont que: 1. les opérations sur les chaines sont non destructives (créent une autre chaine au lieu d'agir sur la chaine originale) 2. l'objet s est une référence, mais les référence sont passées par valeur (on peut altérer l'objet référencé, mais pas la référence elle même): + crée une nouvelle chaine la référence de cette nouvelle chaine est affectée s (on essaie de changer la référence s et l'effet de cette modification n'est que local) (revoir l'exemple du cours "méthode auxilliaires et réutilisabilité" avec les tableaux) */ /* version incorrecte public static void concatener(String s,String s2 ) { s += s2; } */ // version corrigée public static String concatener(String s,String s2 ) { s += s2; return s; } } |