si on veut être précis, c'est du passage par valeur car si on modifie l'argument (la référence qu'il contient), la variable passée n'est pas modifiée.
eg:
void F (Obj argument)
{
argument = ...;
}
Obj var;
F(var);
si F(var) change la référence dans var alors c'est du passage par référence, sinon c'est par valeur.