Sobes.tech
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

В этом коде происходит следующее:

  1. Создаётся объект A a = new A(); с полем val.
  2. a.val устанавливается в 1.
  3. Вызывается метод inc(a), который увеличивает a.val на 1. Теперь a.val равно 2.
  4. Печатается a.val — вывод будет 2.
  5. Вызывается метод set(a), в котором параметр a локально переназначается на новый объект new A() с val = 10. Однако это не влияет на объект вне метода, так как параметр передаётся по ссылке на объект, но сама ссылка копируется.
  6. Печатается a.val — вывод будет всё ещё 2.

Итоговый вывод:

2
2

Объяснение:

  • В Java объекты передаются в методы по значению ссылки. То есть копируется ссылка на объект.
  • В методе inc изменяется поле объекта, на который ссылается a, поэтому изменения видны вне метода.
  • В методе set ссылка a переназначается на новый объект, но это локальное изменение ссылки, не влияющее на оригинальный объект вне метода.