Ответ
В Java все параметры в методы передаются по значению (pass-by-value). Для примитивных типов (int, boolean, double и т.д.) передаётся копия самого значения.
Механика:
- При вызове метода создаётся локальная копия переменной-аргумента.
- Все операции внутри метода выполняются с этой копией.
- После завершения метода копия уничтожается, а исходная переменная остаётся неизменной.
Пример:
public class PrimitiveExample {
static void modify(int x) {
x = x + 10; // Меняется локальная копия 'x'
System.out.println("Inside method: x = " + x); // Вывод: 15
}
public static void main(String[] args) {
int original = 5;
modify(original);
System.out.println("After method: original = " + original); // Вывод: 5
}
}
Как передать изменение наружу?
- Возврат значения:
int increment(int x) { return x + 1; } original = increment(original); - Использование mutable-обёртки:
void modify(AtomicInteger x) { x.incrementAndGet(); // Изменяет состояние объекта } // AtomicInteger — это объект, передаётся копия ссылки на него - Завернуть в свой объект (но это уже ссылочный тип):
class Holder { int value; } void modify(Holder h) { h.value = 10; }
Ключевое отличие для ссылочных типов: Передаётся копия ссылки на объект. Через эту копию можно изменить состояние объекта, но нельзя переприсвоить саму исходную ссылку.