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.