Chapter 6

Conversions De Types


🔄 Conversion implicite vs explicite en Java

La conversion permet de changer le type d’une donnĂ©e pour l’adapter Ă  une autre variable ou expression.


1. Conversion implicite (promotion automatique)

  • Java effectue automatiquement la conversion quand il n’y a pas de risque de perte de donnĂ©es.
  • Se produit souvent quand on passe d’un type plus petit Ă  un type plus grand.

Exemples classiques :

DeVersExemple
intdoubledouble d = 5;
byteintint x = 10;
int a = 10;
double b = a;  // Conversion implicite

2. Conversion explicite (casting)

  • NĂ©cessaire quand il y a un risque de perte de donnĂ©es ou incompatibilitĂ©.
  • Le programmeur doit forcer la conversion avec un cast (type).

Exemples classiques :

DeVersExemple
doubleintint x = (int) 9.99;
longintint y = (int) 100000L;
double x = 9.99;
int y = (int) x;  // Conversion explicite, décimale perdue

3. Différences clés

AspectConversion impliciteConversion explicite
Nécessite une action ?Non, automatiqueOui, cast obligatoire (type)
Risque de perteNonOui
SensDu plus petit au plus grandDu plus grand au plus petit
Exemplesint → doubledouble → int

4. En résumé

  • Conversion implicite = sĂ»re, automatique, du type petit vers grand.
  • Conversion explicite = risquĂ©e, forcĂ©e, du type grand vers petit.
  • Utilise toujours le casting explicite pour Ă©viter les erreurs de compilation.

🧠 À retenir

  • Java convertit tout seul quand c’est sĂ»r.
  • Pour tout ce qui peut perdre des infos, il faut caster manuellement.
  • Sois vigilant avec les conversions explicites, elles peuvent tronquer ou modifier la valeur.

Conversion_des_types

Le terme le plus utilisé pour la technique de conversion est « Casting ».

Cas 1

Conversion 1 : String vers les numériques
Conversion 2 : Les numériques vers une String en utilisant la méthode valueOf()
Conversion 3 : Les numériques vers une String en utilisant la méthode toString()
Conversion 4 : String vers les primitifs
Conversion 5 : Primitifs vers String
Conversion 6 : Les primitifs vers une String en utilisant la méthode valueOf()

Automatique vs manuelle

Conversion automatique : il s’agit d’une conversion d’un type plus petit en un type plus grand

byte -> short -> char -> int -> long -> float -> double

Cas 2

Conversion manuelle :

il s’agit de la conversion d’un type plus grand en un type de taille plus petite. Il suffit de rajouter le casting du type voulu Ă  droite.

double -> float -> long -> int -> char -> short -> byte double d = 2000.23; float f = (float)d; long l = (long) f;

Quand on diminue la taille il y a parfois une perte d’information comme si l’on passe de float Ă  int:

    float a = 4.53F;
    System.out.println((int) a);
        
    //4

Pour résumer :

  • Dans le cas d’une conversion de petit vers grand ➔ on ne fait rien.
  • Dans le cas d’une conversion d’un grand vers un petit ➔ il faut « Caster » la partie droite en type du petit.

đŸ§Ș Exercice 1 : Fusion de types

Objectif : Comprendre la promotion automatique des types.

đŸ§Ÿ Consignes :

  • CrĂ©e une variable byte avec une valeur (ex. byte b = 10;)
  • CrĂ©e une variable int et affecte-lui la valeur de b (sans cast)
  • Affiche la valeur de l’int
  • Explique dans un commentaire pourquoi ça fonctionne sans cast

🔧 Concepts : conversion implicite byte → int


✂ Exercice 2 : Tronquage d’un flottant

Objectif : Observer la perte de donnĂ©es lors d’un cast.

đŸ§Ÿ Consignes :

  • DĂ©clare une variable double avec une valeur dĂ©cimale (ex. double d = 123.456;)
  • Caste-la en int et stocke le rĂ©sultat dans une nouvelle variable
  • Affiche les deux valeurs
  • Constate la perte des dĂ©cimales

🔧 Concepts : conversion explicite double → int


🔁 Exercice 3 : Enchaünement de cast

Objectif : Appliquer plusieurs conversions manuelles successives.

đŸ§Ÿ Consignes :

  • DĂ©clare une variable double avec une valeur (ex. double x = 1000.99;)
  • Convertis-la en float, puis en long, puis en int
  • Affiche chaque Ă©tape
  • Observe l’évolution de la donnĂ©e Ă  chaque cast

🔧 Concepts : conversion explicite en chaüne : double → float → long → int



đŸ“„ Passage d’arguments par la ligne de commande en Java


1. 🔍 Qu’est-ce que c’est ?

En Java, on peut passer des valeurs à un programme au moment de son exécution, directement depuis la ligne de commande.

Ces valeurs sont appelées arguments et sont transmis au programme via le tableau String[] args de la méthode main.


2. 📌 Syntaxe

✅ DĂ©claration classique

public class MonProgramme {
    public static void main(String[] args) {
        // args est un tableau de chaĂźnes
    }
}

✅ ExĂ©cution (en ligne de commande)

java MonProgramme argument1 argument2 argument3

Ces argument1, argument2, etc. seront accessibles dans le tableau args.


3. đŸ§Ș Exemple simple

public class ExempleArgs {
    public static void main(String[] args) {
        System.out.println("Premier argument : " + args[0]);
        System.out.println("DeuxiĂšme argument : " + args[1]);
    }
}

⚠ Important

  • args[0] = premier argument
  • args[1] = deuxiĂšme argument
  • args.length = nombre total d’arguments

4. 🛑 Gestion des erreurs

Il faut toujours vérifier la taille du tableau args pour éviter les erreurs :

if (args.length < 2) {
    System.out.println("Erreur : il faut au moins 2 arguments.");
    return;
}

5. 🔄 Conversion de type

Les arguments sont des chaßnes de caractÚres (String) par défaut. Pour utiliser des nombres :

int age = Integer.parseInt(args[0]);    // Convertit en int
double taille = Double.parseDouble(args[1]); // Convertit en double

⚠ Attention aux erreurs si l’utilisateur entre des valeurs non numĂ©riques.


6. 🎯 Utilisation typique

  • Fournir des paramĂštres (nom, Ăąge, etc.) Ă  un programme.
  • ContrĂŽler le comportement du programme (mode test, options, etc.).
  • Éviter de coder en dur des valeurs.

7. 📩 Exemple complet

public class BonjourNom {
    public static void main(String[] args) {
        if (args.length == 0) {
            System.out.println("Usage : java BonjourNom <nom>");
            return;
        }
        System.out.println("Bonjour " + args[0] + " !");
    }
}

🧠 À retenir

ÉlĂ©mentDĂ©tail
String[] argsTableau contenant les arguments
args.lengthNombre d’arguments passĂ©s
args[i]iᔉ argument (indexĂ© Ă  partir de 0)
ConversionUtiliser Integer.parseInt(), Double.parseDouble(), etc.
Bonne pratiqueVĂ©rifier la longueur du tableau avant d’accĂ©der aux Ă©lĂ©ments

đŸ§© Exercice 1 : Convertisseur Celsius → Fahrenheit

🎯 Objectif : Lire une tempĂ©rature en degrĂ©s Celsius en argument, et afficher sa conversion en Fahrenheit.

🔧 Consigne :

  1. Le programme prend un seul argument numérique.

  2. Il affiche :

    <valeur>°C équivaut à <valeur_fahrenheit>°F
  3. Utilise la formule : F = C × 9/5 + 32

📝 Exemple attendu :

java Convertisseur 25
25°C équivaut à 77.0°F

🛑 Ajoute une vĂ©rification si aucun argument n’est donnĂ© ou si l’entrĂ©e n’est pas un nombre.


🧼 Exercice 2 : Nombre pair ou impair

🎯 Objectif : VĂ©rifier si un nombre entier donnĂ© en argument est pair ou impair.

🔧 Consigne :

  1. Le programme prend un entier en argument.
  2. Il affiche si le nombre est pair ou non

📝 Exemple attendu :

java Parite 41
Le nombre est pair? : false