Символ новой строки Unicode (\ u000d) в Java
Посмотрите следующий фрагмент кода в Java.
public class Main {
public static void main(String[] args) {
// new Character(' \u000d System.out.println("Hello");
}
}
В приведенном выше коде, хотя единственная строка в методе main()
закомментирована, она отображает вывод Hello
на консоли, хотя выглядит так, что эта строка с комментариями содержит некоторые синтаксические ошибки. Если эта строка раскоментирована, она не будет работать вообще, что приведет к ошибке времени компиляции.
Почему здесь выводится "Hello"?
Ответы
Ответ 1
Java анализирует коды escape-кода символов в исходном коде, а не только строки.
Это позволяет использовать Unicode-идентификаторы без кодировки Unicode.
Следовательно, \u000d
в комментарии анализируется как новая строка, заканчивается комментарий и начинается инициализатор экземпляра.
Ответ 2
На самом деле это один из Java Puzzlers.
Головоломка 2: Линейный принтер
Я действительно рекомендую прочитать всю книгу.