Pourquoi Java exécute du code caché dans les commentaires via Unicode ?
Bonjour à tous ! J'ai commencé à apprendre Java récemment et je suis tombé sur un comportement étrange. J'écris un code simple :
```java
public class Test {
public static void main(String[] args) {
// \u000d System.out.println("Hello from comment!");
System.out.println("Hello world");
}
}
```
Je m'attendais à ce que ce code n'affiche que "Hello world", car la deuxième ligne est un commentaire. Mais lors de l'exécution, j'obtiens :
```
Hello from comment!
Hello world
```
Comment est-ce possible ? Je pensais que les commentaires étaient complètement ignorés par le compilateur. Pourquoi le code à l'intérieur du commentaire est-il exécuté ? Est-ce une erreur du compilateur ou est-ce voulu ?
J'ai cherché sur Google, mais je n'ai pas trouvé d'explication claire pour un débutant. Expliquez-moi, s'il vous plaît, comment fonctionne cette magie avec Unicode. Et peut-on se protéger de telles "surprises" dans le code ? Merci d'avance !
<<>>
Réponse courte
Java traite les séquences d'échappement Unicode (par exemple, \u000d) à l'étape la plus précoce de la compilation — avant même l'analyse syntaxique. Ainsi, \u000d est converti en un retour à la ligne, ce qui termine le commentaire et transforme la ligne suivante en code exécutable. Ce n'est pas un bug, mais un comportement défini par la spécification du langage Java.