L'absence de passage par référence en Java et son impact sur l'échange de primitives
En Java, la transmission des paramètres aux méthodes se fait par valeur, ce qui signifie que toute modification apportée aux paramètres de la méthode ne sera pas reflétée dans les variables de l'appelant. Cela pose un défi lorsque vous essayez d'échanger les valeurs de deux primitives.
Tentative d'échange de primitives avec passage par valeur
Considérez la fonction d'échange suivante en Java :
<code class="java">void swap(int a, int b) { int temp = a; a = b; b = temp; }</code>
Cette fonction tente d'échanger les valeurs de deux entiers en créant une variable temporaire et en jonglant manuellement avec les valeurs. Cependant, après avoir appelé cette fonction, les valeurs d'origine restent inchangées en raison de la sémantique de passage par valeur de Java.
Surmonter la limitation
Pour contourner cette limitation, on peut utiliser une technique qui exploite l'approche Java du passage de paramètres. En utilisant plusieurs affectations dans la fonction swap, il est possible de réaliser efficacement l'échange :
<code class="java">int swap(int a, int b) { return a; } // Usage: y = swap(x, x = y);</code>
Dans cette version modifiée, la fonction swap attribue a à b, puis renvoie a. L'appelant peut ensuite attribuer la valeur de retour à y et échanger les valeurs réelles de x et y :
<code class="java">y = swap(x, x = y);</code>
Échange générique pour plusieurs objets
Cette technique peut être généralisé pour prendre en charge l'échange de plusieurs objets du même type :
<code class="java"><T> T swap(T... args) { return args[0]; } // Usage: z = swap(a, a = b, b = c, ... y = z);</code>
En s'appuyant sur l'exécution séquentielle des affectations et du passage de paramètres, il est possible d'échanger efficacement des objets en Java, fournissant ainsi une solution de contournement au manque de Fonctionnalité "passer par référence".
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!