/** * Un autre exemple du troisième cours portant sur la transmission de * références. */ public class Ex32 { /* * Cette fonction échange des données, mais non pas des données qui * auraient été passées en paramètre, puisque ce n'est pas possible, * elle échange des données qui sont «ailleurs» mais accessible via * le paramètre passé. Quand on appelle cette fonction, on lui * transmet la valeur d'une référence, qui sert à l'initialisation * de la référence t, laquelle désigne alors une zone de stockage * existante par ailleurs (probablement dans le tas). On ne * transmet pas cette zone, on transmet simplement son adresse... * La modification effectuée dans cette zone est donc observable * au retour de l'appel! */ public static void echange(int []t) { int tmp = t[0]; t[0] = t[1]; t[1] = tmp; } /* * Ceci est une fonction qui reçoit en paramètre une valeur du type * référence vers tableau d'entiers, cette valeur sera stockée dans * le paramètre (la variable locale) de nom t. */ public static void f(int []t) { System.out.println(t+" "+t[0]); // t désigne maintenant un nouveau tableau t = new int[2]; // on modifie ce nouveau tableau t[0] = 111; // on fait joujou avec ce tableau (voir la fonction echange) echange(t); System.out.println(t+" "+t[0]); // quand on sort t est oubliée (détruite), le tableau se retrouve // orphelin de référence (il n'y a plus de référence le désignant) // et est donc recyclé... } public static void main(String []args) { int []tab; tab = new int[5]; System.out.println(tab+" "+tab[0]); f(tab); System.out.println(tab+" "+tab[0]); tab[0] = 111; tab[1] = 222; System.out.println(tab+" "+tab[0]+" "+tab[1]); echange(tab); System.out.println(tab+" "+tab[0]+" "+tab[1]); echange(tab); System.out.println(tab+" "+tab[0]+" "+tab[1]); } }