Transtypage
Le transtypage (en anglais : cast / casting) est une opération qui consiste à convertir le type d’une expression. La conversion de type se réalise en faisant précéder l’expression par le type cible entre parenthèses. Cette proposition s’applique à certains types primitifs et aux types objets liés par une relation d’héritage. Les conversions incorrectes provoquent une erreur à la compilation ou à l’exécution. A noter qu’un transtypage ne change pas le type des variables concernées (le type d’une variable est défini une fois pour toute dès sa création) : l’opération de transtypage est simplement un changement de point de vue qu’on demande au compilateur.
Syntaxe :
(newType) expression
Exemple :
int n = 87 ; char c = (char) (n / 2) ;
Mais certaines classes offrent des méthodes spécifiques plus adéquates, notamment :
• pour les conversions réel entier : – la méthode Math.round(realValue) permet de convertir un réel en l’entier le plus proche – la méthode Math.floor(realValue) associée à une conversion en entier fournit le plus grand entier inférieur ou égal à l’argument.
Exemple : (int)Math.floor(15.7) vaut 15
– la méthode Math.ceil(realValue) associée à une conversion en entier fournit le plus petit entier supérieur ou égal à l’argument.
Exemple : (int)Math.ceil(15.7) vaut 16
• pour les conversions en ou à partir de String :
– la méthode toString(), dont hérite tout objet, permet de convertir un objet en String – la méthode valueOf(primitiveTypeExpression), de la classe String, renvoie la représentation String de la valeur de son argument – la méthode valueOf(string), dont dispose toute classe enveloppe, renvoie une instance de cette classe enveloppe contenant la valeur représentée par l’argument de type String Exemples :
// Convert String type
primitive type double x = Double.parseDouble(“3.14159”) ;
// Convert String type
wrapped type Double pi = Double.valueOf(“3.14159”) ;
// Convert wrapped type
primitive type int k = Integer.valueOf(“1789”).intValue() ;
// Convert primitive type
String type String piStr = String.valueOf(3.14159) ;
// Convert primitive type
String type Double pi = new Double(3.14159) ;
String s = pi.toString() ;
Autoboxing / unboxing. Depuis la plate-forme 5.0 (voir chapitre 16), les valeurs de type primitif sont, en cas de besoin, implicitement converties en l’objet de la classe enveloppe correspondante (autoboxing), et réciproquement (unboxing). Auparavant, la conversion devait être explicite.
6 OPERATEURS ET EXPRESSIONS
Java possède un nombre considérable d’opérateurs arithmétiques et logiques. Les expressions sont constituées d’opérandes et d’opérateurs. Les opérandes peuvent être de différentes natures : variable, constante, appel de fonction. Dans une expression, tous les opérateurs doivent être explicites. Quand plus d’un opérateur apparaît dans une seule expression, alors des règles de précédence sont utilisées pour déterminer l’ordre d’application. S’il est nécessaire d’altérer l’ordre normal d’évaluation, des parenthèses peuvent être utilisées. A précédences égales, l’expression est évaluée de gauche à droite. Recommandations de style :
♦ Utiliser les parenthèses pour isoler les sous-expressions afin d’éviter les problèmes de précédence d’opérateur et rendre le code plus lisible pour tout programmeur.
♦ Insérer un espace avant et après chaque opérateur autre que le point