Создание массивов в Java (стиль С++)

Почему мы не можем создавать массивы в Java следующим образом:

int marks[5];

И присваивать значения после этого объявления?

Любой, пожалуйста, объясните терминологию или разницу.

Ответы

Ответ 1

Это связано с тем, что в Java нет массивов стеков. Вот эквивалент Java:

int[] marks = new int[5];

Он очень похож на распределение массивов динамического размера в С++. Конечно, вам не нужно беспокоиться о вызове delete[], потому что он собрал мусор.

Ответ 2

Поскольку синтаксис, который вы цитируете, выделяет массив в стеке, а массивы Java - это объекты, а все объекты Java выделяются в куче (по модулю недавних оптимизаций JVM, но они неявные).

И это в значительной степени должно быть таким образом на языке без ручного управления памятью, потому что материал, распределенный по стекам, исчезает, когда вызов возвращается, что приводит к оборванным указателям, а фундаментальная особенность Java - не допускать подобных вещей.

Конечно, можно утверждать, что Java должен использовать синтаксис выделения стека для выделения кучи, но это могло бы смутить черт из всех, кто знал C - нехорошо.

Ответ 3

В Java размер массива определяется выражением, которое его создает, например:

int[] marks = new int[5];

или

int[] marks = {1,2,3,4,5};

Отметьте также, что хотя синтаксис int marks[] разрешен в Java (у Java есть несколько таких правил для совместимости с С++), это не рекомендуется, синтаксис int[] marks более идиоматичен и, следовательно, предпочтительным.

Ответ 4

int[] marks = new int[]{1, 2, 3};

Ответ 5

Поскольку массивы Object -s (наследуются от класса Object). А для создания объекта вам нужно использовать ключевое слово new. (В большинстве случаев).
Я думаю, что причина ключевого слова new заключается в том, чтобы обозначить, что переменные являются ссылками на динамически распределенные экземпляры.