在Java中创建数组时,new操作符的作用是什么?

4
当我们创建一个类类型的对象时,new运算符会在运行时分配内存。
例如:
myclass obj1 = new myclass();

这里的myclass()定义了一个myclass的构造函数。

但是...

int arr1[4] = new int[];

new关键字用于分配内存,但是在这里int[]表示什么意思呢?

5个回答

6

new分配内存,但是int[]在这里的作用是什么?

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

然而,由于数组无法动态增长,因此写new int[]是没有意义的(即使在声明中指定了int[4]),您必须像这样编写:

int arr1[] = new int[4];

或者像这样

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

JLS中相关的章节:


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


1
我不会在“int”和“[]”之间放置空格。 - starblue

1

以上程序使用以下代码声明了一个数组:

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

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


0

创建一个对象实例。 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

不,int arr1[4]=new int[]; 不会编译,因此它不会在堆上分配任何字节 ;) - aioobe
@aioobe:同意。但问题是:new运算符做什么 - KMån

0
int[] a=new int[5];
  1. 在上面的数组声明中,int[]是数组类型,即整数类型数组
  2. a是数组名称,例如声明变量'a'------> int a; 对于数组int[] a,[]用于表示仅声明数组,与此不同的是

现在来看看new

new是一个运算符,这个运算符的作用是什么?

这个新的运算符进入堆内存并分配一个数组(由于int[])并在数组类型int(由于int[5])中分配5个值,调用引用变量。这里的引用变量是数组名a。

无论在堆中创建的数组都会给予引用变量a。

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

在上面的例子中,有5个位置作为int[5],并且引用变量指向数组内存位置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接