Подтвердить что ты не робот

Инициализация массива int

У меня есть простой вопрос, связанный с Java. Скажем, у вас есть массив int как переменная экземпляра:

int[] in = new int[5];

Итак, теперь по умолчанию он содержит 5 нулей. Но что, если у вас есть тот же массив, что и локальная переменная. Нужно ли инициализировать нули? Это не домашнее задание, я изучаю язык Java. С наилучшими пожеланиями

4b9b3361

Ответ 1

Первым делом, чтобы понять, что локальные переменные хранятся в стеке, которые не инициализируются явно с их значениями по умолчанию. Хотя переменные экземпляра хранятся в Heap, они по умолчанию инициализируются значением по умолчанию.

Кроме того, объекты также создаются в куче, независимо от того, содержит ли эталонная переменная экземпляра свою ссылку или локальную ссылочную переменную.


Теперь, когда вы объявляете ссылку на массив как это как локальную переменную и инициализируете ее массивом: -

int[] in = new int[5];

Ссылка на массив (in) хранится в стеке, а память выделяется для массива, способного удерживать 5 целых элементов в куче (помните, объекты создаются в куче). Затем в куче выделено 5 смежных местоположений памяти (size = 5), для хранения целочисленного значения. И каждый индекс объекта массива содержит ссылку на эту ячейку памяти в последовательности. Затем массив ссылается на этот массив. Таким образом, поскольку память для 5 целых значений выделяется в Heap, они инициализируются значением по умолчанию.

А также, когда вы объявляете ссылку на массив и не инициализируете ее каким-либо объектом массива: -

int[] in;

Ссылка на массив создается в Stack (так как это локальная переменная), но по умолчанию она не инициализируется массивом, и ни к null, как в случае с переменными экземпляра.


Итак, вот как выглядит распределение, когда вы используете первый способ объявления массива и инициализации: -

"Your array reference"
     "on stack"    

       |    |          "Array object on Heap"
       +----+                  
       | in |---------->  ([0, 0, 0, 0, 0])
       +----+
       "Stack"                  "Heap"

Ответ 2

Это одно и то же:

int[] in = new int[5] как переменная экземпляра или локальная переменная. Объект массива in будет содержать нули в обоих случаях.

Разница была бы, если бы вы сделали что-то вроде:

  • Переменная экземпляра: int[] in; (он инициализируется null), а объект in будет находиться в кучном пространстве.

  • Локальная переменная: int[] in; (он должен быть инициализирован пользователем) будет жить в стеке

Ответ 3

Для массивов примитивных типов они инициализируются значениями по умолчанию. В документации говорится:

создается одномерный массив указанной длины и каждый компонент массива инициализируется значением по умолчанию

Для значения целочисленного типа по умолчанию используется значение 0.

Ответ 4

Да, когда вы инициализируете массив, содержимое будет установлено на значение по умолчанию для этого типа, для int оно будет 0, а для ссылочного типа оно будет null.

Если вы инициализируете массив и проверяете содержимое, вы можете увидеть это сами:

...
final int[] in = new int[5];

for (int i = 0; i < in.length; i++) {
    System.out.println(in[i]);
}
...

Это напечатает:

0
0
0
0
0

Ответ 5

да

public void method() {
    int[] in = new int[5];
    System.out.pritnln(in[0]); //output in 0
}

В этом случае ваш Array - это локальная переменная, все, что вам нужно, это инициализировать массив. после инициализации массива voila ваш элемент массива ** получит свои значения по умолчанию.

Ответ 6

Не имеет значения, будет ли объявленный массив в переменной экземпляра или локальной переменной инициализироваться значением по умолчанию.

Каждая переменная класса, переменная экземпляра или компонент массива инициализируется значением по умолчанию при его создании.

По JLS

An array initializer creates an array and provides initial values for all its components.

Ответ 7

Массив не содержит 5 нулей при создании его как локальной переменной.