Какое значение по умолчанию у переменной типа boolean в Java?

Ответ

Значение по умолчанию зависит от контекста объявления переменной:

  1. Поля класса (нестатические) и статические переменные: Инициализируются значением false.
  2. Локальные переменные внутри методов: Не имеют значения по умолчанию. Компилятор требует явной инициализации перед использованием, иначе возникает ошибка компиляции.

Пример, демонстрирующий разницу:

public class DefaultValuesExample {
    boolean instanceField;       // Значение по умолчанию: false
    static boolean staticField;  // Значение по умолчанию: false

    public void someMethod() {
        boolean localVariable;   // Не инициализирована
        // System.out.println(localVariable); // ОШИБКА КОМПИЛЯЦИИ: variable might not have been initialized
        localVariable = true;    // Требуется явная инициализация
        System.out.println(localVariable); // OK
    }
}

Ответ 18+ 🔞

Вот же ж, классика, блядь! Сидишь такой, пишешь код, думаешь — ну boolean, что там может быть сложного? А потом бац — и тебе в жопу раз, ошибка компиляции, потому что локальную переменную не проинициализировал. Ёпта, аж волнение ебать!

Смотри, тут всё просто, как три копейки, но с подвохом, сука.

Есть два типа этих самых boolean-переменных, и они живут по разным законам, блядь:

  1. Поля класса (ну, те, что просто в теле класса объявлены) и статические переменные. Это, можно сказать, привилегированные граждане. JVM их при рождении сразу награждает значением false. Ничего не делай — уже false. Как будто по умолчанию они все немножко лгут, блядь.

  2. Локальные переменные внутри методов. А вот это, сука, мартышлюшки безответственные! У них нет никакого значения по умолчанию, нихуя! Компилятор на них смотрит как на потенциальных дебилов и говорит: «Чувак, бля, я тебе не доверяю. Пока сам явно не присвоишь true или false — я тебя в работу не пущу, иди нахуй». И будет прав, между прочим.

Вот смотри, живой пример, чтобы совсем пиздец всё стало ясно:

public class DefaultValuesExample {
    boolean instanceField;       // Вот этому чуваку автоматом впендюрили false. Живёт припеваючи.
    static boolean staticField;  // И этому тоже. Статик он или нет — похуй, всем false.

    public void someMethod() {
        boolean localVariable;   // А вот эта хитрая жопа — пустая. В ней вакуум, блядь.
        // System.out.println(localVariable); // Раскомментируешь — получишь пиздюлей от компилятора! «variable might not have been initialized», ёбта!
        localVariable = true;    // Вот теперь, сука, взял и явно сказал, что тут true. Порядок.
        System.out.println(localVariable); // Теперь всё ок, можно использовать. Вилкой в глаз не ткнут.
    }
}

Короче, запомни, как «Отче наш»: поля класса — им похуй, они с false стартуют. А внутри метода — будь добр, сам всё определи, а то накроешься медным тазом с ошибкой компиляции. Всё просто, блядь!