Сколько объектов создается в этом фрагменте кода - PullRequest
2 голосов
/ 01 апреля 2019

Сколько объектов будет создано для этого кода?

class Main {
  int num;
  public static void gacemarks(Main m)
  {
    m.num += 10;
  }
  public static void main(String[] args) {
    Main m1 = new Main();
    Main m2 = m1;
    Main m3 = new Main();
    m2.num = 60;
    gacemarks(m2);
    System.out.println(m2);
  }
}

Ответ 2. Но я получил 3. m1 будет создан, m2 относится к тому же объекту m3 создается заново, и после вызова генерируется объект m.

Ответы [ 3 ]

2 голосов
/ 01 апреля 2019

Ответ 2

Это верно.Давайте посчитаем вместе:

m1 будет создано

Правильно, это ваш объект номер один.

m2 относится ктот же объект

Опять же, новые объекты не добавлены;счет остается одним.

m3 создается заново

Это ваш номер два.

и после вызова m объект сгенерирован.

В коде нет объекта m: при передаче m2 другим методам копия не создается.Следовательно, окончательный счет остается двумя.

2 голосов
/ 01 апреля 2019

Хотя есть два Main объекта, созданных непосредственно в коде (с оператором new), можно утверждать, что System.out.println(m2); создает дополнительный объект String из-за вызова toString().

2 голосов
/ 01 апреля 2019

В контексте вашего кода, только два объекта, которые я вижу, создаются явно: это строки, в которых появляется оператор new:

Main m1 = new Main();
Main m3 = new Main();

Вот разбивка, которая происходит в каждомстрока:

Main m1 = new Main();     // create new Main object 'm1'
Main m2 = m1;             // assign 'm2' to reference 'm1' (no new object)
Main m3 = new Main();     // create new Main object 'm3'
m2.num = 60;              // assign a field in 'm2' (no new object)
gacemarks(m2);            // repeatedly increment the 'm2.num' field (no new object)
System.out.println(m2);   // print 'm2' (no new object)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...