Retour au cours

Paramètres de méthode, arguments et passage par valeur

Maîtrise de Java : De Zéro à Développeur Professionnel (Un parcours en 50 leçons)

Leçon 15 : Paramètres de méthode, arguments et passage par valeur

Les méthodes ont souvent besoin de données d'entrée pour effectuer leurs tâches. Ces données sont transmises via des paramètres et des arguments.

1. Paramètres vs Arguments

  • Paramètres : Variables définies dans la signature de la méthode (la définition) qui reçoivent les données.
  • Arguments : Les valeurs réelles passées à la méthode lors de son appel.

java public class Greeting { // name et hour sont des PARAMÈTRES public void greet(String name, int hour) { String timeOfDay = (hour < 12) ? "Matin" : "Soir"; System.out.println("Bon " + timeOfDay + ", " + name); } }

// Appel de la méthode Greeting g = new Greeting(); // "Sarah" et 9 sont des ARGUMENTS g.greet("Sarah", 9); // Sortie : Bon Matin, Sarah

2. Java utilise toujours le passage par valeur

Lorsque vous passez un argument à une méthode, Java utilise toujours le passage par valeur. Cela signifie qu'une copie de la valeur est transmise.

Primitifs (Passage par valeur)

Si vous passez un type primitif (int, double, etc.), la méthode reçoit une copie. Les modifications à l'intérieur de la méthode n'affectent pas la variable d'origine.

java public void changePrimitive(int number) { number = 99; // Modifie la COPIE de la variable }

int x = 10; changePrimitive(x); // x est toujours égal à 10 en dehors de la méthode

Objets (Passage par valeur de la référence)

Lors du passage d'un objet, Java passe toujours une copie de la valeur—mais cette valeur est l'adresse mémoire (la référence) de l'objet.

  • Vous pouvez modifier le contenu de l'objet : Car la variable d'origine et le paramètre pointent vers le même objet en mémoire.
  • Vous ne pouvez pas changer ce vers quoi pointe la variable d'origine : Si vous assignez un tout nouvel objet au paramètre à l'intérieur de la méthode, la variable d'origine à l'extérieur reste inchangée.

java // Supposons que Person est une classe avec une propriété name public void changeObject(Person p) { p.setName("Nom Modifié"); // OK : Modifie l'état de l'objet

// p = new Person("Nouvelle Référence"); // Échoue à modifier la référence d'origine

}