Back to questions
СБЕР
Senior
5
// 3 public class Variables { public static void main(String[] args) { A a = new A(); a.val = 1; inc(a); System.out.println(a.val); set(a); System.out.println(a.val); } public static class A { public int val; } public static void inc(A a) { a.val++; } public static void set(A a) { a = new A(); a.val = 10; } }
Companies where asked
Answer from AI
sobes.tech AI
В этом коде происходит следующее:
- Создаётся объект
A a = new A();с полемval. a.valустанавливается в 1.- Вызывается метод
inc(a), который увеличиваетa.valна 1. Теперьa.valравно 2. - Печатается
a.val— вывод будет2. - Вызывается метод
set(a), в котором параметрaлокально переназначается на новый объектnew A()сval = 10. Однако это не влияет на объект вне метода, так как параметр передаётся по ссылке на объект, но сама ссылка копируется. - Печатается
a.val— вывод будет всё ещё2.
Итоговый вывод:
2
2
Объяснение:
- В Java объекты передаются в методы по значению ссылки. То есть копируется ссылка на объект.
- В методе
incизменяется поле объекта, на который ссылаетсяa, поэтому изменения видны вне метода. - В методе
setссылкаaпереназначается на новый объект, но это локальное изменение ссылки, не влияющее на оригинальный объект вне метода.