Maison  >  Article  >  Java  >  Pouvez-vous échanger des valeurs primitives en Java sans passer par référence ?

Pouvez-vous échanger des valeurs primitives en Java sans passer par référence ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-27 08:20:31160parcourir

 Can You Swap Primitive Values in Java Without Pass by Reference?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn