В Java передаются ли примитивные типы по ссылке? Можно ли изменить исходную переменную внутри метода?

«В Java передаются ли примитивные типы по ссылке? Можно ли изменить исходную переменную внутри метода?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет. В Java все параметры передаются по значению (pass-by-value). Для примитивных типов (int, boolean и т.д.) в метод передаётся копия значения. Изменение этой копии внутри метода не влияет на исходную переменную.

void modifyPrimitive(int value) {
    value = 100; // Меняется только локальная копия
}

public static void main(String[] args) {
    int number = 5;
    modifyPrimitive(number);
    System.out.println(number); // Вывод: 5 (значение не изменилось)
}

Как можно изменить значение "снаружи"?

  1. Вернуть новое значение из метода и присвоить его.
  2. Использовать объект-обёртку, например, AtomicInteger, который является изменяемым контейнером.
  3. Передать массив или другой изменяемый объект, содержащий нужное значение.