Avatar ·

Por que o Java executa código escondido em comentários via Unicode?

Olá a todos! Comecei a estudar Java recentemente e me deparei com um comportamento estranho. Escrevo um código simples: ```java public class Test { public static void main(String[] args) { // \u000d System.out.println("Hello from comment!"); System.out.println("Hello world"); } } ``` Eu esperava que esse código imprimisse apenas "Hello world", porque a segunda linha é um comentário. Mas ao executar, recebo: ``` Hello from comment! Hello world ``` Como assim? Eu pensei que comentários fossem completamente ignorados pelo compilador. Por que o código dentro do comentário é executado? Isso é um erro do compilador ou foi feito de propósito? Pesquisei no Google, mas não encontrei uma explicação clara para iniciantes. Expliquem, por favor, como funciona essa mágica com Unicode. E é possível se proteger de tais "surpresas" no código? Desde já, obrigado! <<>>

Resposta curta

O Java processa sequências de escape Unicode (por exemplo, \u000d) no estágio mais inicial da compilação — antes mesmo de analisar a sintaxe ou reconhecer comentários. O \u000d é o caractere Unicode para CR (carriage return), que quebra a linha, fazendo com que o código após ele seja tratado como uma nova linha de código, fora do comentário.