public class Wow {
public static void main(String[] args) {
if ( false == true ){ // \u000a\u007d\u007b
System.out.println("How is it possible!!!");
}
}
}
Ответ 1
Хорошо, я буду великодушен и предположим, что этот вопрос был задан из-за невинности.
Компилятор Java анализирует Unicode escape-последовательности очень рано. В частности, он делает это до снятия комментариев или проверки синтаксиса. Поскольку \u000a является символом новой строки, \u007d является символом "}", а \u007b является символом "{", синтаксический анализатор фактически анализирует эту программу:
public class Wow{
public static void main(String[] args) {
if ( false == true ){ //
}{
System.out.println("How is it possible!!!");
}
}
}
Эта программа всегда будет выводить "невозможный" вывод.
Ответ 2
Я просто экспериментировал с этим вопросом (ответ тоже) и нашел интересное поведение
public class TestUniCode {
public static void main(String[] args) {
System.out.println(" Printing first line");
// \u000a\u007d\u007b
System.out.println(" Printing second line");
}
}
И очень удивительно (для меня) он печатает только Printing first line и игнорирует вторую строку
EDIT. Я понял, что он закрывает основной метод после первой строки, а вторая строка выходит за пределы основного в качестве отдельного блока