@Radia
Анимешник, который мечтает создать свою игру.

Вопрос про массивы в Java, и понимание разницы между С++ и Java?

Integer[] arr = new Integer[5];

Integer arr1[];

Есть ли разница между этими массивами? Раньше изучал С++ и мне не привычно синтаксис первого массива, ибо так в С++ выделялся память для динамического массива. В Java для всех массивов выделяеться память динамический? С++ статичесий язык а Java ООП, но я не до конца понимаю разницу между ними. В ООП есть классы, хотя и в С++ тоже есть классы. Короче говоря, я сильно запутался. Помогите.
  • Вопрос задан
  • 137 просмотров
Решения вопроса 3
xez
@xez Куратор тега Java
Senior Junior Roo
Integer[] arr = new Integer[5];   // так вы объявляете массив длинной 5 элементов.
Integer[] arr1; // переменная arr1 объявлена, но не инициализирована.

Можно написать так:
Integer[] arr;
arr = new Integer[5];


Если хотите динамических массивов - изучайте коллекции. В java есть коллекции на все случаи жизни.
Ответ написан
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
Разница между этими переменными в том, что вторая неинициализированна, и в ней null.
В джаве все массивы "динамические", то есть выделены в куче, а не на стеке.
С++ статичесий язык а Java ООП

Путаете мягкое с тёплым. Джава тоже статически типизированный язык.
В джаве, в отличие от С++ все объекты выделяются в куче, поэтому все переменные(кроме примитивов) содержат в себе ссылку. Массив в джаве тоже выделяется в куче, а массив объектов (Integer это объект в отличие от int) это, на самом деле, массив ссылок.
int[] a; // a == null
int[] b = new int[5]; // b == [0, 0, 0, 0, 0]
int[] c = new int[]{1, 2, 3}; // c == [1, 2, 3]
Integer[] d; // d == null
Integer [] e = new Integer[5]; // e == [null, null, null, null, null]
Integers [] f = new Integer[]{1, 2, 3}; // f == [Integer(1), Integer(2), Integer(3)} случился autoboxing, то есть автоматическая запаковка примитивов в соответствующий объект.
Ответ написан
@mayton2019
Ent. Software engineer. Oracle. SQL. BigData.
Основная разница - это контроль границ. В runtime, java не позволит вам выскочить вне диапазона индексов.

В c++ runtime - никакого массива не существует. Можно как получать различные аномалии в поведении приложения, (повредить другие структуры данных процесса), так и получать молчаливое поведение, что усложняет поиск ошибок.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
ОТП Банк Москва
от 240 000 до 270 000 ₽
Sportmaster Lab Санкт-Петербург
от 150 000 ₽
Эвотор Москва
от 180 000 до 250 000 ₽
23 янв. 2021, в 18:06
5000 руб./за проект
23 янв. 2021, в 17:51
150000 руб./за проект