En Java, le passage de paramètres se fait intrinsèquement par valeur, ce qui pose un défi lorsque l'on tente d'échanger des variables primitives au sein d'une méthode . Une implémentation naïve, telle que :
<code class="java">void swap(int a, int b) { int temp = a; a = b; b = temp; }</code>
ne modifiera pas réellement les variables d'origine en dehors de la méthode. Pour résoudre ce problème, voici deux approches non conventionnelles :
Cette technique permet l'échange en exploitant l'ordre des opérations dans les appels de méthode :
<code class="java">int swap(int a, int b) { // usage: y = swap(x, x=y); return a; }</code>
Quand en appelant swap(x, x=y), la valeur de x sera transmise à swap avant l'affectation à x. Ainsi, lorsque a est renvoyé et affecté à y, il échange effectivement les valeurs de x et y.
Pour une solution plus généralisée, une méthode générique peut être définie qui peut échanger n'importe quel nombre d'objets du même type :
<code class="java"><T> T swap(T... args) { // usage: z = swap(a, a=b, b=c, ... y=z); return args[0]; }</code>
Appeler cette méthode comme z = swap(a, a=b, b=c) échangera les valeurs de a, b et c , attribuant la valeur finale à z.
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!