junior
Каким образом передаются переменные в методы, по значению или по ссылке?
В Java параметры всегда передаются только по значению, что определяется как «скопировать значение и передать копию». С примитивами это будет копия содержимого. Со ссылками - тоже копия содержимого, т.е. копия ссылки. При этом внутренние члены ссылочных типов через такую копию изменить возможно, а вот саму ссылку, указывающую на экземпляр - нет.
Пример:
Пример
public class PassByValueExample {
public static void main(String[] args) {
// 1. Примитивный тип — значение копируется, оригинал не изменяется
int x = 10;
changeValue(x);
System.out.println(x); // 10 — значение не изменилось
// 2. Ссылочный тип — копия ссылки указывает на тот же объект,
// поэтому изменение внутреннего состояния объекта видно снаружи
StringBuilder sb = new StringBuilder("Hello");
appendText(sb);
System.out.println(sb); // Hello World — содержимое объекта изменилось
// 3. Переприсвоение ссылки внутри метода не влияет на оригинал
StringBuilder sb2 = new StringBuilder("Original");
replaceReference(sb2);
System.out.println(sb2); // Original — ссылка не изменилась
}
static void changeValue(int val) {
val = 99; // изменяем локальную копию
}
static void appendText(StringBuilder builder) {
builder.append(" World"); // изменяем объект через копию ссылки
}
static void replaceReference(StringBuilder builder) {
builder = new StringBuilder("New"); // переприсваиваем локальную копию ссылки
}
}