Вы можете считать (и это не реальность, но это как-то работает), что примитивы - это что-то вроде этого (я вернусь к реальности позже ... так что продолжайте читать):
int.7, int.42 (не компилируется), где int - это класс (это не так), а 7 и 42 - открытые статические конечные переменные (это не так).
и эти строки примерно такие:
String. "Hello", String. "World" (не компилируется), где String является классом (он есть), а "Hello" и "world" являются открытыми статическими конечными переменными (они не являются).
Если бы моя ложная реальность была правдой, у тебя было бы что-то вроде:
// again, won't compile.
public class int
{
public static final int 7 = new int(7);
public static final int 42 = new int(42);
private final ??? data;
public int(??? val)
{
data = val;
}
}
и
// also will not compile
public class String
{
public final String "Hello" = new String("Hello);
public final String "world" = new String("world);
private final ??? data;
public String(final ??? val)
{
data = val;
}
}
теперь вы создаете массив вроде (все равно не скомпилируется):
int[] array = new int[] { int.7, int.42 };
String[] array = new String[] {String."Hello", String."world" };
В случае String моя альтернативная реальность была бы очень глупой, поскольку класс String не мог бы знать заранее каждую возможную строку (для int это возможно).
Таким образом, мы избавились бы от открытых статических переменных final в String и сделали бы это вместо этого:
String[] array = new String[] { new String("Hello"), new String("world") };
Теперь к реальности:
Когда компилятор Java, когда он видит "Hello" или "world", он делает что-то похожее на "new String (" Hello ")" - это немного умнее, так что если у вас есть "Hello" 20 раз в файл, в котором есть только одна копия (и некоторые другие вещи).
Когда вы говорите:
new int[100]; you get an array of 100 ints all set to 0.
new String[100]; you get an array of 100 Strings all pointing to null.
new Data[100]; you get 100 Dates all pointing to null.
Поскольку строки String и Date указывают на null, вам необходимо выделить новый объект для каждого. Причиной того, что вам не нужно говорить «новое» со строкой, является то, что компилятор обрабатывает это специально. Причина, по которой вам не нужно говорить «новый» с int, заключается в том, что это примитив, а не объект.
Итак, простой ответ на ваш вопрос заключается в том, что вам нужно назначить новую дату для каждого элемента массива: -)