Сколько объектов создано следующим кодом? - PullRequest
0 голосов
/ 20 марта 2012

У меня был экзамен, на котором я должен посмотреть этот код и ответить на следующий вопрос.

Object a,b,c,d,e;
e= new Object();
b=a=e;
e= new Object();

Сколько объектов создано этим кодом?

Возможные ответы были такими:

  • 2
  • 5
  • 4
  • Неверный код

Похоже, что 2 было правильным ответом, но я не понимаю почему - я вижу 5 объектов (a, b, c, d, e) здесь, не Я

Ответы [ 5 ]

4 голосов
/ 20 марта 2012

Два объекта будут созданы

Object a,b,c,d,e; // only declares a to e as Object (at this time they are not initialized)
e= new Object(); // 1st e refers to a newly created object
b=a=e;           // b and a refer both to the same object as e
e= new Object(); // 2nd, this instantion and assignment does not 
                 // change a or b, a and b still refer to the 1st created  Object
2 голосов
/ 20 марта 2012

У вас есть 2 звонка на new Object(), поэтому 2. Код выглядит действительным.

1 голос
/ 20 марта 2012

Два разных объекта.

Первый создается на первом e= new Object();, а затем, ссылка, копируется в a и b. Это означает, что e,a,b указывает на один и тот же объект

Второй объект создан на втором e= new Object();

Итак, у вас есть:

a,b --> points to Object "one"
e --> point to Object "two"
1 голос
/ 20 марта 2012

new - ключевое слово для «создания» объекта.Есть 2 new объекта, поэтому создается 2 объекта.

0 голосов
/ 11 июля 2013

Да, будут созданы два разных объекта.

Вы можете проверить это, посмотрев также результаты hashCode().

Первый раз, когда создается obj, b, a и e указывают на этот объект.

Во второй раз, когда новый объект создается с помощью e = new Object(), e теперь указывает на этот объект, тогда как b и a все еще указывают на старый объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...