Avatar ·

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.