Vous aimez ce que vous lisez sur ce blog ?
Envie d'aller plus loin avec véritable formation d'expertise en Java ?
Venez suivre ma formation Masterclasse Expertise Java !

"Même un développeur experimenté a besoin de continuer à apprendre. Et dans cette formation... j'ai appris beaucoup !" - A.G., Java Champion

Sessions intra-entreprises sur demande : contact[at]mokatech.net.
Inscrivez-vous vite !

Java Quiz #6

Pouvez-vous déterminer ce que fait le code suivant ?

  1. public class RetourChariot
  2. {
  3. public static void main(String... args)
  4. {
  5. // Note : \u000A représente le retour chariot en Unicode
  6. char c = '\u000A';
  7. System.out.println(c);
  8. }
  9. }

Réponse :
Ce code ne compile pas en deux endroits, à cause du caractère Unicode \u000A.

Afin de permettre l'insertion dans le code des symboles existant dans différentes langues (et pas forcément disponibles directement sur le clavier du programmeur), Java autorise l'utilisation de leurs identifiants Unicode, sous la forme "\uxxxx".

Ce n'est toutefois qu'une notation pratique, qui doit être traduite avant de pouvoir compiler le code. Le compilateur effectue donc deux passes :

  1. Tout d'abord il interprète les identifiants Unicode et les remplace par les caractères qu'ils représentent.
  2. Ensuite seulement, il commence à examiner et interpréter le code au sens Java.

Si l'on applique ce raisonnement sur le code du quiz, on s'aperçoit que le code réellement vu par le compilateur est le suivant :

  1. public class RetourChariot
  2. {
  3. public static void main(String... args)
  4. {
  5. // Note :
  6. représente le retour chariot en Unicode
  7. char c = '
  8. ';
  9. System.out.println(c);
  10. }
  11. }

Il présente donc deux erreurs :

  1. Le commentaire a été coupé sur deux lignes. La seconde ligne n'est plus un commentaire et ne compile donc pas.
  2. La déclaration du char a également été coupée en deux.

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.