Sobes.tech
Junior

Comment convertiriez-vous les types de référence en types primitifs et vice versa?

sobes.tech IA

Réponse de l'IA

Pour les types de référence (par exemple, Integer, Double, Boolean), l'autoboxing (auto-encapsulation) est utilisé pour les types primitifs (int, double, boolean). La JVM convertit automatiquement le type de référence en son équivalent primitif lorsque cela est nécessaire.

// Type primitif
int primitiveInt = 10;

// Création d'un type de référence à partir d'un primitif (auto-encapsulation)
Integer objectInt = primitiveInt; // Conversion automatique de int en Integer

// Conversion d'un type de référence en primitif (auto-déballage)
int newPrimitiveInt = objectInt; // Conversion automatique de Integer en int

Pour les types primitifs vers des types de référence (par exemple, int vers Integer, double vers Double, boolean vers Boolean), l'autoboxing est utilisé. La JVM crée automatiquement un objet de type de référence à partir d'une valeur primitive.

// Type primitif
double primitiveDouble = 3.14;

// Création d'un type de référence à partir d'un primitif (auto-encapsulation)
Double objectDouble = primitiveDouble; // Conversion automatique de double en Double

// Conversion d'un type de référence en primitif (auto-déballage)
double newPrimitiveDouble = objectDouble; // Conversion automatique de Double en double

Il est important de se rappeler que lors de la conversion d'un type de référence en un primitif (déballage) peut survenir une NullPointerException si le type de référence a la valeur null.

De plus, avant l'apparition de l'autoboxing/déballing, on utilisait des méthodes explicites des classes enveloppantes, telles que intValue(), doubleValue(), booleanValue() pour convertir des types de référence en primitifs, et des constructeurs ou méthodes statiques valueOf() pour convertir des primitifs en types de référence. L'autoboxing/déballing a grandement simplifié ce processus.

// Conversion explicite avant l'autoboxing/déballing
Integer explicitInteger = new Integer(25); // Utilisation du constructeur (obsolète)
int explicitInt = explicitInteger.intValue(); // Utilisation de la méthode intValue()

// Utilisation de la méthode statique valueOf() (préférée)
Integer valueOfInteger = Integer.valueOf(50);
int valueOfInt = valueOfInteger.intValue();