Проблема в том, что замена Юникода выполняется очень рано во время компиляции.Экранирование Unicode не только допустимо в строках и символьных литералах (как и другие escape-последовательности, такие как \t
) - они действительны в любом месте в коде.Они описаны в другой области спецификации - раздел 3.3 , а не раздел 3.10.6 ;только последний - это символьный и строковый литерал escape-последовательности.
В основном, прочитайте раздел 3 спецификации для получения более подробной информации о лексической структуре:)
Итак, ваш код был фактически эквивалентно:
public class Test {
public static void main(String argv[]) {
System.out.println("
");
}
}
... что явно не является допустимым кодом.Для возврата каретки и перевода строки, в основном, лучше использовать escape-последовательности "\ r" и "\ n".
Лично я рассматриваю эту обработку выхода из Юникода как недостаток в Java, но не так уж многомы можем сделать это сейчас: (