Retour au cours

Transtypage (Casting) et conversion de type (Implicite vs Explicite)

Maîtrise de Java : De Zéro à Développeur Professionnel (Un parcours en 50 leçons)

Leçon 9 : Transtypage et conversion de type

La conversion de type, ou casting, est le processus consistant à changer une valeur d'un type de données à un autre.

1. Conversion implicite (Widening Conversion)

Cela se produit automatiquement lors de la conversion d'un type plus petit vers un type plus grand (ex: int vers double). Java effectue cela automatiquement car il n'y a aucun risque de perte de données.

java int myInt = 100; double myDouble = myInt; // Conversion implicite : 100 devient 100.0

// Ordre d'élargissement (sûr) : byte -> short -> int -> long -> float -> double

long largeNum = 500000; float approxNum = largeNum; // Valide, mais la précision peut être perdue si le long est immense

2. Conversion explicite (Narrowing Conversion)

Cela nécessite d'instruire manuellement le compilateur à l'aide de parenthèses (). C'est nécessaire lors de la conversion d'un type plus grand vers un type plus petit (ex: double vers int). Une perte de données est possible.

java double salary = 50000.75;

// On cast explicitement le double en int int wholeSalary = (int) salary; // wholeSalary sera 50000 (le .75 est perdu)

byte b; int i = 257; // On force la conversion, mais les données sont perdues/rebouclées b = (byte) i; // b sera 1 (puisque 257 > 127)

System.out.println(b); // Sortie : 1

3. Conversion impliquant des Strings (Non-primitifs)

Convertir des primitifs en Strings et inversement nécessite des méthodes utilitaires, généralement issues des classes wrappers (comme Integer ou Double).

  • Primitif vers String : java int num = 45; String s1 = String.valueOf(num); String s2 = num + ""; // Raccourci courant

  • String vers Primitif : java String s = "123"; // Utilisation de la méthode parse sur la classe wrapper int i = Integer.parseInt(s); // i vaut maintenant 123

    String priceStr = "99.50"; double price = Double.parseDouble(priceStr);