[Précédent] |
5.6 |
Passage par valeur - Corrigé | Niveau 1 |
||
Fichiers: |
ConcatIncorrecte.java |
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 |
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; } } |
[Précédent] |