在java中创建数组时,new运算符会做什么?

时间:2010-10-17 07:16:58

标签: java arrays memory-management

当我们创建一个classtype对象时,new运算符会在运行时分配内存。

myclass obj1 = new myclass();

此处myclass()定义了myclass

的构造函数

int arr1[4] = new int[];

new分配内存,但是int[]在这里做了什么?

5 个答案:

答案 0 :(得分:6)

  

New分配内存,但int []在这里做什么?

int[]部分只是指定新分配的内存应该具有的类型。

但是,由于数组不能动态增长,因此编写new int[]没有意义(即使你在声明中指定了int[4]),你也必须写它或者像这样

int arr1[] = new int[4];

或者像这样

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

JLS中的相关部分:

答案 1 :(得分:3)

您的代码:

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

答案 2 :(得分:1)

上述程序使用以下代码行声明anArray:

int[] anArray; //声明一个整数数组

与其他类型的变量的声明一样,数组声明有两个组件:数组的类型和数组的名称。 数组的类型写为type [],其中type是包含元素的数据类型;方括号是特殊符号,表示此变量包含数组。数组的大小不是其类型的一部分(这就是括号为空的原因)。与其他类型的变量一样,声明实际上并不创建数组 - 它只是告诉编译器该变量将包含指定类型的数组。

答案 3 :(得分:0)

创建对象的实例。 newheap上分配内存。 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

答案 4 :(得分:0)

int[] a=new int[5];
  1. 在上面的数组声明中,int []是数组类型,即整数类型数组
  2. a是数组名称,例如声明变量'a'------> int a; 对于数组int [] a的相同方式,其中[]表示声明数组只有diff是[]
  3. 现在来到新的

    new是一个运算符这个运算符的功能是什么?

    这个新运算符转到堆内存并分配一个数组(由于int [])并在数组类型int中分配5个值(由于int [5])调用引用变量。其中引用变量是arrayname即a。

    在堆中创建的任何数组都被赋予引用变量a

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

    上述示例中的5个位置为int[5],引用变量指向数组内存位置