← Назад к вопросам

Как работают значения переменных по умолчанию

1.0 Junior🔥 251 комментариев
#Основы Java

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Значения переменных по умолчанию в Java

Значения по умолчанию — это значения, которые JVM автоматически присваивает переменным (как переменным экземпляра класса, так и элементам массива) при их инициализации. Локальные переменные (внутри методов) не получают значения по умолчанию и должны быть инициализированы явно перед использованием.

Различие между локальными переменными и переменными экземпляра

public class DefaultValues {
    private int age;
    private boolean active;
    private String name;
    
    public void method() {
        int localAge;
        boolean localActive;
        
        System.out.println(age);
        System.out.println(localAge);
    }
}

Таблица значений по умолчанию

Тип данныхЗначение по умолчаниюПримечание
byte0Целое число
short0Целое число
int0Целое число
long0LЦелое число
float0.0fЧисло с плавающей точкой
double0.0dЧисло с плавающей точкой
booleanfalseЛогическое значение
charпустой символNull character
Ссылочные типыnullВсе объекты и массивы

Примеры

Примитивные типы

public class PrimitiveDefaults {
    private int intValue;
    private long longValue;
    private float floatValue;
    private double doubleValue;
    private boolean boolValue;
    private char charValue;
    private byte byteValue;
    private short shortValue;
    
    public void printDefaults() {
        System.out.println("int: " + intValue);
        System.out.println("long: " + longValue);
        System.out.println("float: " + floatValue);
        System.out.println("double: " + doubleValue);
        System.out.println("boolean: " + boolValue);
        System.out.println("char value");
        System.out.println("byte: " + byteValue);
        System.out.println("short: " + shortValue);
    }
}

Ссылочные типы

public class ReferenceDefaults {
    private String name;
    private List<String> items;
    private int[] numbers;
    private Object obj;
    
    public void printDefaults() {
        System.out.println("String: " + name);
        System.out.println("List: " + items);
        System.out.println("Array: " + numbers);
        System.out.println("Object: " + obj);
    }
}

Массивы

public class ArrayDefaults {
    public static void main(String[] args) {
        int[] intArray = new int[5];
        String[] stringArray = new String[3];
        boolean[] boolArray = new boolean[2];
        
        System.out.println("int[0]: " + intArray[0]);
        System.out.println("int[1]: " + intArray[1]);
        System.out.println("String[0]: " + stringArray[0]);
        System.out.println("boolean[0]: " + boolArray[0]);
    }
}

Где срабатывают значения по умолчанию

1. Переменные экземпляра (Instance Fields)

public class User {
    private int age;
    private String name;
    private boolean isActive;
    
    public User() {
    }
    
    public static void main(String[] args) {
        User user = new User();
        System.out.println(user.age);
        System.out.println(user.name);
        System.out.println(user.isActive);
    }
}

2. Статические переменные (Static Fields)

public class Config {
    public static int maxConnections;
    public static String host;
    
    public static void main(String[] args) {
        System.out.println(Config.maxConnections);
        System.out.println(Config.host);
    }
}

3. Элементы массива

public void arrayExample() {
    int[] nums = new int[10];
    String[] words = new String[5];
    
    for (int i = 0; i < nums.length; i++) {
        System.out.println(nums[i]);
    }
    
    for (int i = 0; i < words.length; i++) {
        System.out.println(words[i]);
    }
}

Локальные переменные — НЕ инициализируются автоматически

public class LocalVariables {
    public void method() {
        int localInt;
        String localStr;
        
        int localInt2 = 0;
        String localStr2 = null;
        
        System.out.println(localInt2);
        System.out.println(localStr2);
    }
}

Почему это так?

  1. Производительность: инициализация переменных экземпляра происходит один раз при создании объекта
  2. Локальные переменные: находятся в стеке вызовов, их инициализация — ответственность программиста
  3. Безопасность памяти: значения по умолчанию предотвращают использование неинициализированной памяти

Практический пример: Работа с коллекциями

public class CollectionDefaults {
    public static void main(String[] args) {
        Integer[] numbers = new Integer[5];
        System.out.println(numbers[0]);
        
        Integer[] numbers2 = new Integer[5];
        for (int i = 0; i < numbers2.length; i++) {
            numbers2[i] = 0;
        }
        
        Integer[] numbers3 = new Integer[5];
        Arrays.fill(numbers3, 0);
    }
}

Специальный случай: char

public class CharDefault {
    private char empty;
    
    public void test() {
        System.out.println("Пустой символ есть");
        System.out.println("Код символа: " + (int)empty);
        
        if (empty == 0) {
            System.out.println("Это нулевой символ");
        }
    }
}

Исключения из правил

public class FinalExample {
    private final int id;
    
    public FinalExample(int id) {
        this.id = id;
    }
}

public class InitializedExample {
    private int id = 42;
    private String name = null;
}

Выводы

  • Переменные экземпляра: получают значения по умолчанию (0, false, null)
  • Статические переменные: получают значения по умолчанию
  • Элементы массива: получают значения по умолчанию
  • Локальные переменные: НЕ инициализируются, вызывают ошибку компиляции
  • Примитивы: 0 или false
  • Ссылочные типы: null

Это один из самых частых источников ошибок в Java — всегда инициализируй локальные переменные явно перед использованием!

Как работают значения переменных по умолчанию | PrepBro