Maison  >  Article  >  Java  >  Comment fonctionnent réellement l'auto boxing et le unboxing en Java ?

Comment fonctionnent réellement l'auto boxing et le unboxing en Java ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-20 02:59:01660parcourir

How Does Auto Boxing and Unboxing Really Work in Java?

Boxing et déballage automatiques en Java : une plongée plus approfondie

Depuis son introduction dans JDK 5.0, le boxing et le déballage automatiques sont une fonctionnalité pratique en Java. Cependant, une confusion surgit lorsqu'on essaie de comprendre les mécanismes sous-jacents de ces processus.

Auto Boxing

Auparavant, on pensait que l'auto boxing reposait uniquement sur des constructeurs implémentés dans le wrapper cours. Cependant, l'examen du bytecode révèle une autre histoire.

Pour boxer un int dans un Integer :

Integer n = 42;

Le compilateur génère :

bipush 42
invokestatic java/lang/Integer.valueOf:(I)Ljava/lang/Integer;

Cela montre que le La méthode valueOf() est utilisée à la place d’un constructeur. Ce choix de conception permet la mise en cache et empêche la création d'objets inutiles pendant le boxing.

Déballage automatique

De même, le déballage n'implique pas directement les constructeurs. Par exemple, pour déballer un Integer en un int :

int n = Integer.valueOf(42);

Le bytecode équivalent est :

bipush 42
invokestatic java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
invokevirtual java/lang/Integer.intValue:()I

Ici, la méthode intValue() récupère la valeur primitive de l'objet wrapper.

Conclusion

Le boxing et le déballage automatiques en Java sont implémentés via les méthodes valueOf() et *Value(), respectivement. Ces méthodes permettent des conversions efficaces entre les classes wrapper et les types primitifs, offrant la commodité et la flexibilité sur lesquelles s'appuient les développeurs.

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