29
mar.
2008
mar.
2008
Java Quiz #6
Java / JEE ›
Java Quiz
|
Tags :
java
Par Olivier Croisier
Pouvez-vous déterminer ce que fait le code suivant ?
public class RetourChariot { public static void main(String... args) { // Note : \u000A représente le retour chariot en Unicode char c = '\u000A'; System.out.println(c); } }
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 :
- Tout d'abord il interprète les identifiants Unicode et les remplace par les caractères qu'ils représentent.
- 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 :
public class RetourChariot { public static void main(String... args) { // Note : représente le retour chariot en Unicode char c = ' '; System.out.println(c); } }
Il présente donc deux erreurs :
- Le commentaire a été coupé sur deux lignes. La seconde ligne n'est plus un commentaire et ne compile donc pas.
- La déclaration du char a également été coupée en deux.