Что делает оператор new при создании массива в Java? - PullRequest
4 голосов
/ 17 октября 2010

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

Скажем

myclass obj1 = new myclass();

здесь myclass() определяет конструктор myclass

но

int arr1[4] = new int[];

new выделяет память, но что int[] здесь делает?

Ответы [ 5 ]

6 голосов
/ 17 октября 2010

New выделяет память, но что здесь делает int []?

Часть int[] просто указывает, какой тип должна иметь вновь выделенная память.

Однако, поскольку массив не может динамически расти, нет смысла писать new int[] (даже если вы указали int[4] в объявлении), вам придется написатьэто или так

int arr1[] = new int[4];

или вот так

int arr1[] = {1, 2, 3, 4};

Соответствующие разделы в JLS:

3 голосов
/ 17 октября 2010

Ваш код:

int arr1[4] = new int[];

не скомпилируется.Это должно быть:

int arr1[] = new int[4];

установка [] до того, как имя массива считается хорошей практикой, поэтому вы должны сделать:

int[] arr1 = new int[4];

в общем случае массив создается как:

type[] arrayName = new type[size];

Часть [size], указанная выше, определяет размер массива, который будет выделен.

И почему мы используем new при создании массива?

Поскольку массивы в Java являются объектами.Имя массива arrayName в приведенном выше примере - это не фактический массив, а просто ссылка.Оператор new создает массив в куче и возвращает ссылку на вновь созданный объект массива, который затем присваивается arrayName.

1 голос
/ 17 октября 2010

Вышеприведенная программа объявляет anArray со следующей строкой кода:

int[] anArray; // объявляет массив целых чисел

Как и объявления для переменных других типов, объявление массива имеет дваКомпоненты: тип массива и имя массива. Тип массива записывается как type [], где type - тип данных содержащихся элементов;квадратные скобки являются специальными символами, указывающими, что эта переменная содержит массив. Размер массива не является частью его типа (именно поэтому квадратные скобки пусты).Как и в случае переменных других типов, объявление фактически не создает массив - оно просто сообщает компилятору, что эта переменная будет содержать массив указанного типа.

0 голосов
/ 25 июля 2015
int[] a=new int[5];
  1. В приведенном выше объявлении массива int [] - это тип массива, т.е. массив целочисленных типов
  2. a - это имя массива, например, для объявления переменной 'a' ------> int a; то же самое для массивов int [] a, где [] указывает на то, что объявление массива только diff равно []

теперь перейдите на новый

new является оператором, что является функцией этого оператора?

этот новый оператор отправляется в память кучи и выделяет массив (из-за int []) и выделяет 5 значений внутри массива. Тип int (из-за int [5]) вызывает ссылочную переменную.

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

                memory diagram
                ---------------------
                |  in heap memory    |
                |                    |
                ||------------------ |
                ||  |   |   |  |  |  |
                |------------------- |
      /          ---------------------
    /
  /   
a/

5 позиций как int[5] в вышеприведенном примере, а ссылочная переменная указывает на область памяти массива

0 голосов
/ 17 октября 2010

Создает экземпляр объекта.new выделяет память на кучу .int arr1[4]=new int[]; выделяет 14 байтов в куче.

Правильное объявление массива int выглядит следующим образом:

int[] arr = new int[] {1,2,3};  // legal, array of size 3
int[] a = new int[100];  // Declare and allocate, array of size 100
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...