@Radia

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

Integer[] arr = new Integer[5];

Integer arr1[];

Есть ли разница между этими массивами? Раньше изучал С++ и мне не привычно синтаксис первого массива, ибо так в С++ выделялся память для динамического массива. В Java для всех массивов выделяеться память динамический? С++ статичесий язык а Java ООП, но я не до конца понимаю разницу между ними. В ООП есть классы, хотя и в С++ тоже есть классы. Короче говоря, я сильно запутался. Помогите.
  • Вопрос задан
  • 237 просмотров
Решения вопроса 3
xez
@xez Куратор тега Java
TL 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
@mayton2019 Куратор тега Java
Bigdata Engineer
Основная разница - это контроль границ. В runtime, java не позволит вам выскочить вне диапазона индексов.

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

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

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
19 апр. 2024, в 23:00
5000 руб./за проект
19 апр. 2024, в 20:43
20000 руб./за проект