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é.