La description des opérations réalisées lors de l'invocation d'une fonction spécifie la relation entre l'argument, qui figure dans l'expression d'invocation, et le paramètre correspondant, qui figure dans la définition de la fonction : pour chaque paramètre d'une fonction, et pour chaque invocation, il y a création d'une variable dans son cadre d'invocation et initialisation de cette variable par la valeur de l'argument correspondant. Les affectations à un paramètre ne peuvent donc pas modifier la valeur de l'argument correspondant quand cet argument est une variable. Par exemple, la procédure PassageParValeur.test suivante, après avoir initialisé le paramètre x à la valeur de l'argument n, lui affecte 0 (et n'en fait rien d'utilisable), mais ne modifie évidemment pas n, variable locale de PassageParValeur.main :
package exemples; class PassageParValeur { static void test(int x) { x = 0; } public static void main(String[] args) { int n = 4; test(n); // n n'est pas modifiée System.out.println("n = " + n); // --> n = 4 } }