Вопрос по java, default-value, arrays, initialization, int – инициализация массива int

22

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

int[] in = new int[5];

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

@uml для лучшего понимания смотрите ответ rohit jains :) PermGenError
Но я хочу, чтобы некоторые обсуждения позволили мне понять основную логику, а не только запомнить ответ. uml

Ваш Ответ

7   ответов
5

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

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

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

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

1

да

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

В этом случае вашМассив является локальной переменнойвсе, что вам нужно, этоинициализировать ваш массив, как только вы инициализируете свой массив,вуаля вашЭлементы массива ** s получают свои ** значения по умолчанию.

Почему он содержит нули? Локальная переменная должна быть явно инициализирована. uml
в этом случае ваш массив - это локальная переменная, а не ее элементы, вы инициализировали свой массив, поэтому элемент sin в массиве получает значения по умолчанию :) PermGenError
3

олчанию. вдокументация это говорит:

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

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

1

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

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

СогласноJLS

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

52

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

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

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

int[] in = new int[5];

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

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

int[] in;

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

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

"Your array reference"
     "on stack"    

       |    |          "Array object on Heap"
       +----+                  
       | in |---------->  ([0, 0, 0, 0, 0])
       +----+
       "Stack"                  "Heap"
И каждый индекс объекта массива содержит ссылку на эти ячейки памяти в последовательности. На самом деле, нет. Индекс просто смещение от массиваотправная точка. shmosel
+1 очень очень хорошее объяснение .. Nandkumar Tekale
Короче говоря, если вы делаете,int[] in = new int[5], массив будет инициализирован к значениям по умолчанию. psun
0

когда вы создаете его как локальную переменную.

Итак, что это содержит? Мусор? uml
2

когда вы инициализируете массив, содержимое будет установлено в значение по умолчанию для этого типа, для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

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