Подтвердить что ты не робот

Как это возможно в Java для false равным true

В этой программе, как ложь может быть равна true:

public class Wow {
    public static void main(String[] args) {
        if ( false == true ){ // \u000a\u007d\u007b
            System.out.println("How is it possible!!!");
        }
    }
}
4b9b3361

Ответ 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. Я понял, что он закрывает основной метод после первой строки, а вторая строка выходит за пределы основного в качестве отдельного блока