Échange de primitives en Java : résoudre la limitation du passage par valeur
En Java, la transmission des paramètres aux méthodes se fait par valeur, ce qui signifie que les modifications apportées aux paramètres au sein de la méthode ne sont pas reflétées dans les variables d'origine. Cela peut être problématique lorsque vous essayez d'échanger les valeurs de types primitifs, tels que des entiers.
L'extrait de code ci-dessous illustre le problème :
<code class="java">public static void swap(int a, int b) { int temp = a; a = b; b = temp; }</code>
Après avoir exécuté cette méthode, les valeurs d'un et b restent inchangés, car la méthode n'a pas accès à la référence d'origine de ces variables.
Pour surmonter cette limitation, une approche consiste à utiliser une « astuce » qui exploite l'opérateur d'affectation Java. Le code suivant fournit un exemple :
<code class="java">public static int swap(int a, int b) { return a; // usage: y = swap(x, x=y); }</code>
Cette méthode s'appuie sur l'ordre d'évaluation dans l'opération d'affectation x=y. Tout d'abord, x est passé dans la méthode swap(), puis y est affecté à x, échangeant ainsi leurs valeurs. Le retour a renvoie simplement la valeur initiale de a, qui est désormais équivalente à y.
Une autre approche consiste à créer une méthode générique qui peut échanger n'importe quel nombre d'objets du même type :
<code class="java">public static <T> T swap(T... args) { return args[0]; // usage: z = swap(a, a=b, b=c, ... y=z); }</code>
Cette méthode prend un nombre variable d'arguments et renvoie le premier élément. Il utilise le même principe que l'exemple précédent, où l'affectation des arguments suivants échange effectivement leurs valeurs.
En employant ces techniques, les développeurs peuvent obtenir le comportement d'échange souhaité, même si Java transmet les paramètres par valeur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!