[英]What does the new operator do when creating an array in java?
当我们创建一个classtype对象时,new运算符会在运行时分配内存。
说
myclass obj1 = new myclass();
这里myclass()
定义了myclass
的构造函数
但
int arr1[4] = new int[];
new分配内存,但int[]
在这里做什么?
新的分配内存,但int []在这里做什么?
int[]
部分简单地指定新分配的内存应该具有的类型。
但是,由于数组不能动态增长,所以编写new int[]
是没有意义的(即使你在声明中指定了int[4]
),你必须像这样编写它
int arr1[] = new int[4];
或者像这样
int arr1[] = {1, 2, 3, 4};
JLS中的相关部分:
你的代码:
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
。
上面的程序使用以下代码行声明anArray:
int[] anArray;
//声明一个整数数组
与其他类型的变量的声明一样,数组声明有两个组件:数组的类型和数组的名称。 数组的类型写为type [],其中type是包含元素的数据类型; 方括号是特殊符号,表示此变量包含数组。 数组的大小不是其类型的一部分(这就是括号为空的原因)。 与其他类型的变量一样,声明实际上并不创建数组 - 它只是告诉编译器该变量将包含指定类型的数组。
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]
,引用变量指向数组内存位置
创建对象的实例。 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.