当我们创建一个classtype对象时,new运算符会在运行时分配内存。
说
myclass obj1 = new myclass();
此处myclass()
定义了myclass
但
int arr1[4] = new int[];
new分配内存,但是int[]
在这里做了什么?
答案 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)
创建对象的实例。 new
在heap上分配内存。 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];
a
是数组名称,例如声明变量'a'------> int a;
对于数组int [] a的相同方式,其中[]表示声明数组只有diff是[] 现在来到新的
new是一个运算符这个运算符的功能是什么?
这个新运算符转到堆内存并分配一个数组(由于int [])并在数组类型int中分配5个值(由于int [5])调用引用变量。其中引用变量是arrayname即a。
在堆中创建的任何数组都被赋予引用变量a
memory diagram
---------------------
| in heap memory |
| |
||------------------ |
|| | | | | | |
|------------------- |
/ ---------------------
/
/
a/
上述示例中的5个位置为int[5]
,引用变量指向数组内存位置