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