04 : Éléments de Base - Transtypage, Types Référence et Chaînes de Caractères
Transtypage (Casting)
Définition :
Le transtypage (casting) est une conversion de type explicite effectuée sous la responsabilité du programmeur.
Syntaxe :
(Type_de_destination) Valeur_à_convertir
Exemples détaillés :
int i = 17; byte b = 4; // Conversion implicite : littéral int -> byte // b = i; // ERREUR à la compilation - conversion restrictive nécessite un cast b = (byte)i; // Conversion explicite (int -> byte)
float f = 23.86f; i = (int)f; // Valeur tronquée (i == 23)
Cas courants de transtypage :
// Conversion avec perte de précision double d = 9.99; int entier = (int)d; // entier = 9 (troncature)
// Conversion entre entiers de tailles différentes long grand = 100000L; short petit = (short)grand; // Risque de débordement
// Conversion en majuscules/minuscules String maj = s1.toUpperCase(); // "BONJOUR" String min = s1.toLowerCase(); // "bonjour"
Conversions Types Primitifs ↔ String
Méthodes de conversion :
Type primitif
Classe Wrapper
Conversion vers String
Conversion depuis String
byte
Byte
Byte.toString(byte b)
Byte.parseByte(String s)
short
Short
Short.toString(short s)
Short.parseShort(String s)
int
Integer
Integer.toString(int i)
Integer.parseInt(String s)
long
Long
Long.toString(long l)
Long.parseLong(String s)
float
Float
Float.toString(float f)
Float.parseFloat(String s)
double
Double
Double.toString(double d)
Double.parseDouble(String s)
Méthode universelle de conversion vers String :
String.valueOf(valeur); // Fonctionne avec tous les types primitifs
Exemples détaillés de conversions :
int i; // Variable de type int float f; // Variable de type float double d; // Variable de type double String s; // Variable de type String
// Conversions String → types primitifs s = "412"; i = Integer.parseInt(s); // Conversion String -> int
s = "1.234"; d = Double.parseDouble(s); // Conversion String -> double
// Conversions types primitifs → String f = 123.8F; s = Float.toString(f); // Conversion float -> String s = String.valueOf(f); // Conversion float -> String (méthode alternative)
Exemples complémentaires :
// Conversion avec gestion d'erreur try { int nombre = Integer.parseInt("123"); System.out.println("Nombre: " + nombre); } catch (NumberFormatException e) { System.out.println("Chaîne invalide"); }
// Conversion multiple double d = 45.67; String s = Double.toString(d); // "45.67" float f = Float.parseFloat(s); // 45.67f
Exemples Pratiques Complets
Exemple 1 : Application des conversions
public class ConversionsPratiques { public static void main(String[] args) { // Données initiales int age = 25; double salaire = 2500.75; String nom = "Pierre";
Quel sera le résultat des opérations de transtypage suivantes et pourquoi?
double d = 15.99; int i = (int) d; long l = 1000000; short s = (short) l; float f = 123.456f; int j = (int) f;
Réponse :
i = 15 (troncature de la partie décimale)
s = 16960 (débordement : 1000000 % 65536 = 16960)
j = 123 (troncature de la partie décimale)
Explication : Le transtypage des flottants vers les entiers tronque la partie décimale. Le transtypage d'un long vers un short peut causer un débordement si la valeur dépasse la capacité du type cible.
Question 2: Types référence vs types primitifs
Quelle est la différence fondamentale entre une variable de type primitif et une variable de type référence en termes de stockage en mémoire?
Réponse :
Type primitif : La variable contient directement la valeur.
Type référence : La variable contient une adresse mémoire (référence) vers l'objet qui contient la valeur.
// Type primitif int age = 25; // age → [25]
// Type référence String nom = "Dupont"; // nom → [référence] → "Dupont"
Question 3: Chaînes de caractères et séquences d'échappement