04 : Éléments de Base - Types Primitifs, Affichage et Conversions
Types Primitifs - Nombres en Virgule Flottante
Valeurs littérales pour float et double :
123.45 // valeur de type double (par défaut) 17d // valeur de type double -4.032F // valeur de type float 6.02e23 // 6.02 x 10²³ de type double -5.076E-2f // -5.076 x 10⁻² de type float
Séparateurs de chiffres (Java 7+) :
Le caractère _ peut être inséré dans les littéraux numériques pour améliorer la lisibilité :
long creditCardNr = 1234_5678_9012_3456L; int tenMillions = 10_000_000; int bytePattern = 0b11000011_00001111_11110000_00110011; float pi = 3.14_15_93f;
Note : Les underscores ne peuvent pas être placés :
Au début ou à la fin d'un nombre
Avant ou après un point décimal
Avant un suffixe (F, L, etc.)
Dans les positions où une série de chiffres est attendue
Cas particuliers numériques :
1.2 / 0.0 // Infini → Double.POSITIVE_INFINITY -5.1 / 0.0 // Moins l'infini → Double.NEGATIVE_INFINITY 0.0 / 0.0 // Not a Number (NaN) → Double.NaN
Attention : Les opérations avec l'infini et NaN peuvent produire des résultats surprenants :
Toute opération avec NaN donne NaN
Infini + Infini = Infini
Infini - Infini = NaN
0 × Infini = NaN
Affichage sur la Console
Méthodes d'affichage :
System.out.print("..."); // Affichage (reste sur la même ligne) System.out.println("..."); // Affichage et retour à la ligne
int size = 123; char unit = 'm'; System.out.print("Longueur : "); System.out.print(size); System.out.print(" "); System.out.println(unit); // Sortie : Longueur : 123 m
// Méthode 2 : Concaténation avec l'opérateur + int size = 123; char unit = 'm'; System.out.println("Longueur : " + size + " " + unit); // Même sortie : Longueur : 123 m
Conversions de Types
Principe général :
Mis à part le type booléen, tous les types primitifs peuvent être convertis entre eux. Le type char peut être considéré comme un entier non signé.
Types de conversions :
Conversion élargissante (Promotion) : Automatique, sans perte d'information (sauf précision en virgule flottante)
Conversion restrictive (Casting) : Explicite, peut entraîner une perte d'information
Tableau des conversions possibles :
De \ Vers
boolean
byte
short
char
int
long
float
double
boolean
–
N
N
N
N
N
N
N
byte
N
–
E
R
E
E
E
E
short
N
R
–
R
E
E
E
E
char
N
R
R
–
E
E
E
E
int
N
R
R
R
–
E
E*
E
long
N
R
R
R
R
–
E*
E*
float
N
R!
R!
R!
R!
R!
–
E
double
N
R!
R!
R!
R!
R!
R*
–
Légende :
N : Pas de conversion possible
E : Conversion élargissante (automatique)
R : Conversion restrictive (nécessite un cast)
* : Perte de précision possible
! : Valeur tronquée possible
Conversions élargissantes (automatiques) :
int i = 100; long l = i; // Conversion automatique int → long float f = l; // Conversion automatique long → float double d = f; // Conversion automatique float → double
byte b = 10; int j = b; // Conversion automatique byte → int
Conversions restrictives (casting explicite) :
double d = 100.04; long l = (long) d; // Conversion double → long (partie entière) int i = (int) l; // Conversion long → int
float f = (float) d; // Conversion double → float byte b = (byte) i; // Conversion int → byte
Exemples détaillés de conversions :
// Conversion avec perte d'information int grandNombre = 1000; byte petitNombre = (byte) grandNombre; // Résultat : -24 (débordement)
// Conversion de caractères char c = 'A'; int codeAscii = c; // Conversion automatique char → int (65)
// Conversion avec arrondi double prix = 19.99; int prixEntier = (int) prix; // Résultat : 19 (troncature)
Conversions implicites dans les expressions constantes :
short compteur = 12 * 34; // Conversion implicite int → short byte valeur = 100 + 28; // Conversion implicite int → byte char lettre = 65; // Conversion implicite int → char ('A')
Règle : Les conversions restrictives implicites sont autorisées uniquement pour les expressions constantes lorsque la valeur peut être représentée sans perte dans le type cible.
Exemples Pratiques Complets
Exemple 1 : Calculs avec différents types
public class ConversionsExemples { public static void main(String[] args) { // Déclarations avec différents types int entier = 100; double decimal = 123.456; float flottant = 45.67f;