CodeGym/Blog Java/Random-FR/Autoboxing et Unboxing en Java
John Squirrels
Niveau 41
San Francisco

Autoboxing et Unboxing en Java

Publié dans le groupe Random-FR
membres
En Java, une fonctionnalité des primitives et de leurs wrappers est le boxing/unboxing automatique. Examinons ce concept. Comme nous l'avons déjà appris, Java est un langage orienté objet. Cela signifie que tous les programmes écrits en Java sont constitués d’objets. Les primitifs ne sont pas des objets. Mais même ainsi, une variable wrapper peut se voir attribuer une valeur primitive. Ce processus est appelé autoboxing. De même, une variable primitive peut se voir attribuer un objet wrapper. Ce processus est appelé unboxing. Par exemple:
public class Main {
   public static void main(String[] args) {
       int x = 7;
       Integer y = 111;
       x = y; // Unboxing
       y = x * 123; // Autoboxing
   }
}
À la ligne 5, nous attribuons y, qui est un objet Integer , à la primitive x . Comme vous pouvez le voir, nous n'avons pas besoin de prendre de mesures supplémentaires : le compilateur sait que int et Integer sont essentiellement la même chose. C'est le déballage. Quelque chose de similaire se produit avec l'autoboxing à la ligne 6 : la valeur primitive (x * 123) est facilement attribuée à l'objet y . Ceci est un exemple d’autoboxing. C'est pourquoi le terme inclut le mot « auto » : parce que vous n'avez rien de spécial à faire pour attribuer des primitives à leurs objets wrapper correspondants (et vice versa). Tout se passe automatiquement. Pratique, hein ? :) Nous voyons un autre exemple de la commodité de l'autoboxing/unboxing lorsque vous travaillez avec des méthodes. En effet, les arguments de méthode sont également automatiquement mis en boîte et déballés. Par exemple, si une méthode prend deux objets Integer comme entrées, nous pouvons facilement passer des int ordinaires à la place !
public class Main {
   public static void main(String[] args) {

       printNumber(7);// A standard int, not even an int variable
   }

   public static void printNumber(Integer i) {
       System.out.println("You entered the number " + i);
   }
}
Sortir:
You entered the number 7
Cela fonctionne également dans l'autre sens :
public class Main {
   public static void main(String[] args) {

       printNumber(new Integer(632));
   }

   public static void printNumber(int i) {
       System.out.println("You entered the number " + i);
   }
}
Un point important que vous devez retenir est le suivant : l’autoboxing et le unboxing ne fonctionnent pas pour les tableaux !
public class Main {
   public static void main(String[] args) {

       int[] i = {1,2,3,4,5};

       printArray(i);// Error, this won't compile!
   }

   public static void printArray(Integer[] arr) {
       System.out.println(Arrays.toString(arr));
   }
}
Tenter de transmettre un tableau de primitives à une méthode qui prend un tableau d'objets entraînera une erreur de compilation. En conclusion, comparons brièvement les primitives et les wrappers une fois de plus.

Primitives :

  • Avoir des avantages en termes de performances
Emballages :
  • Permettez-nous de ne pas violer le principe « tout est objet », ce qui signifie que les nombres, les caractères et les valeurs booléennes ne violent pas ce concept.
  • Élargissez les possibilités de travail avec ces valeurs en fournissant des méthodes et des champs pratiques
  • Sont nécessaires lorsqu'une méthode ne fonctionne qu'avec des objets
Pour renforcer ce que vous avez appris, nous vous proposons de regarder une leçon vidéo de notre cours Java
Commentaires
  • Populaires
  • Nouveau
  • Anciennes
Tu dois être connecté(e) pour laisser un commentaire
Cette page ne comporte pas encore de commentaires