Сколько объектов создано с помощью массива?[Джава] - PullRequest
7 голосов
/ 05 мая 2011

Здравствуйте. Хотелось бы узнать, сколько объектов создано с помощью этого массива?

String arr[] = {"Paul", "Steven", "Jennifer", "Bart"};

Заранее спасибо!

Ответы [ 6 ]

11 голосов
/ 05 мая 2011

Создано девять объектов.

Каждая строка - это ДВА объекта. Ссылка String и базовая строка * char[]. Так что для 4 строк это 8 объектов.

Затем, есть String[], что в общей сложности составляет 9 *. 1007 *

Это, конечно, предполагает, что строковый литерал еще не был intern() отредактирован JVM. Если это так, то он не создаст String, а вместо этого извлечет его из пула intern, что может дать вам 1, 3, 5, 7 или 9 созданных оригинальных объектов, в зависимости от того, как многие String являются intern изд.

2 голосов
/ 05 мая 2011

От 1 до 5 в зависимости от реализации и состояния JVM. Создается новый массив строк, строки - мы не знаем.

РЕДАКТИРОВАТЬ: Как кто-то указал в других ответах. 1-9 будет более точный ответ. Поскольку вы создаете char [] внутри String, когда он создается.

2 голосов
/ 05 мая 2011
String arr[] = {"Paul", "Steven", "Jennifer", "Bart"};
for (Object o : arr) {
   System.out.format("%d\n", o.hashCode());
}
System.out.format("%d\n", arr);

Вы должны получить 5 различных хэш-кодов.Сильное предположение, что теперь в вашей куче существует 5 объектов.

1 голос
/ 05 мая 2011

В зависимости от того, как вы на это смотрите, вы можете сказать 9 объектов или только один.Если вы посмотрите на этот массив в отладчике, вы сможете увидеть 9 объектов, массив, объекты String и символ [] в этих символах [].

Однако литералы String находятся в пуле ине создаются каждый раз (только один раз). Поэтому, если вы запустите эту строку много раз, вы будете создавать только массив каждый раз.т.е. создается только один дополнительный объект.

1 голос
/ 05 мая 2011

Ответ - нет, потому что Array не может создавать объекты, может * new.: P

0 голосов
/ 05 мая 2011

HI,

Создано пять объектов.

Если вы используете

int[] i = new int[5];

, тогда jvm создаст один объект в куче.

Но если вы предоставляете элементы для массива, например,

i[0] = 1;
i[1] = 2;
.
.
i[4] = 5;

, тогда jvm создаст шесть объектов с пятью целыми и одним объектом массива в куче.

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