next up previous contents index
suivant: Membres statiques monter: Méthodes précédent: Invocation   Table des matières   Index

Passage par valeur

Dans le cas d'un type de références (tableau, classe ou interface), la valeur de l'argument est une référence à un objet. Par exemple, la procédure PassageParValeur.test suivante, après avoir initialisé le paramètre x à la valeur de p (qui est une référence au point 202#202), lui affecte une référence au point 206#206, ce qui ne modifie pas la variable p, utilisée comme argument de test :

package geometrie;

class PassageParValeur {
  static void test(Point x) {
    x = new Point();
  }
  
  public static void main(String[] args) {
    Point p = new Point(2, 3);
    test(p);
    System.out.println("x=" + p.x + ", y=" + p.y);  // x=2, y=3
                                           
  }
}

Cependant, à la différence d'une valeur d'un type primitif, une méthode ou l'accès à un champ peut être appliqué à une référence, et l'objet référencé peut être modifié de cette façon :

package geometrie;

class ModificationObjet {
  static void test(Point x) {
    x.translater(1, 1);
  }
  
  public static void main(String[] args) {
    Point p = new Point(2, 3);
    test(p);
    System.out.println("x=" + p.x + ", y=" + p.y);  // x=3, y=4
                                           
  }
}

Dans ce cas, la procédure ModificationObjet.test ne modifie pas la valeur de son argument, qui reste une référence au même objet, mais elle modifie l'objet référencé.



Rene' LALEMENT 2002-11-07