Sobes.tech
Junior
175

Comment les variables sont-elles transmises aux méthodes?

Réponse de l'IA

sobes.tech IA

En Java, les variables sont transmises par valeur aux méthodes.

Cela signifie qu'à l'appel d'une méthode, une copie de la valeur de la variable est créée, et cette copie est transmise à la méthode. Les modifications apportées au paramètre à l'intérieur de la méthode n'affectent que cette copie et ne touchent pas la variable d'origine.

Pour les types de données primitifs (int, float, boolean, etc.), la valeur directe est transmise.

// Type de donnée primitive
int a = 10;

void changeValue(int x) {
  x = 20; // La copie est modifiée, pas la variable 'a' d'origine
}

changeValue(a);
// Après l'appel de la méthode, 'a' vaut toujours 10

Pour les types de données référencés (objets, tableaux), une copie de la référence à l'objet est transmise. La référence elle-même est copiée, mais les deux références pointent vers le même objet en mémoire. Les changements dans l'état de l'objet, effectués à l'intérieur de la méthode via la référence transmise, seront visibles en dehors de la méthode. Cependant, réassigner la référence à l'intérieur de la méthode n'affectera pas la référence originale.

// Type de donnée référencée
class MyObject {
    int value;
}

MyObject obj = new MyObject();
obj.value = 10;

void changeObjectValue(MyObject o) {
  o.value = 20; // Modifie l'état de l'objet, visible de l'extérieur
}

void reassignObject(MyObject o) {
  o = new MyObject(); // Réaffecte la référence locale, n'affecte pas 'obj'
  o.value = 30;
}

changeObjectValue(obj);
// Après l'appel, obj.value vaut 20

reassignObject(obj);
// Après l'appel, 'obj' pointe toujours vers le même objet, et obj.value vaut 20
// Le nouveau MyObject créé dans reassignObject n'est pas accessible de l'extérieur

Ainsi, Java utilise toujours la transmission par valeur, mais pour les types de données référencés, la valeur de la référence est copiée, pas l'objet lui-même.