@Radia

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

Integer[] arr = new Integer[5];

Integer arr1[];

Есть ли разница между этими массивами? Раньше изучал С++ и мне не привычно синтаксис первого массива, ибо так в С++ выделялся память для динамического массива. В Java для всех массивов выделяеться память динамический? С++ статичесий язык а Java ООП, но я не до конца понимаю разницу между ними. В ООП есть классы, хотя и в С++ тоже есть классы. Короче говоря, я сильно запутался. Помогите.
  • Вопрос задан
  • 270 просмотров
Решения вопроса 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 - никакого массива не существует. Можно как получать различные аномалии в поведении приложения, (повредить другие структуры данных процесса), так и получать молчаливое поведение, что усложняет поиск ошибок.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы