jeudi 15 novembre 2012

Exercice JAVA passage de parametres

     But:      Que veut dire qu'une référence est passée par valeur ?
Thème:       Passage de paramètres

Soit le programme suivant :
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;
        }
}

  1. Expliquez pourquoi la méthode concatener ne parvient pas à modifier la chaîne s du main (en y concaténant " Express")
  2. 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
    
    

    Corrigé:

    Fichier: Concatlncorrecte.java
    Les explications et la correction sont données dans le code ci-dessous :
    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;
            }
    }

Aucun commentaire:

Enregistrer un commentaire