例如:
myclass obj1 = new myclass();
这里的myclass()
定义了一个myclass
的构造函数。
但是...
int arr1[4] = new int[];
new关键字用于分配内存,但是在这里int[]
表示什么意思呢?
myclass obj1 = new myclass();
这里的myclass()
定义了一个myclass
的构造函数。
但是...
int arr1[4] = new int[];
new关键字用于分配内存,但是在这里int[]
表示什么意思呢?
new分配内存,但是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
。
以上程序使用以下代码声明了一个数组:
int[] anArray;
// 声明一个整数数组
与其他类型变量的声明一样,数组声明有两个组成部分:数组的类型和数组的名称。 数组的类型写作type[],其中type是包含元素的数据类型;方括号是特殊符号,表示该变量保存一个数组。 数组的大小不是其类型的一部分(这就是为什么方括号为空的原因)。与其他类型的变量一样,声明并不实际创建一个数组 - 它只是告诉编译器,这个变量将保存指定类型的数组。
创建一个对象实例。 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[];
不会编译,因此它不会在堆上分配任何字节 ;) - aioobeint[] a=new int[5];
a
是数组名称,例如声明变量'a'------> int a;
对于数组int[] a,[]用于表示仅声明数组,与此不同的是现在来看看new
new是一个运算符,这个运算符的作用是什么?
这个新的运算符进入堆内存并分配一个数组(由于int[])并在数组类型int(由于int[5])中分配5个值,调用引用变量。这里的引用变量是数组名a。
无论在堆中创建的数组都会给予引用变量a。
memory diagram
---------------------
| in heap memory |
| |
||------------------ |
|| | | | | | |
|------------------- |
/ ---------------------
/
/
a/
int[5]
,并且引用变量指向数组内存位置。