数据类型 数组名称[ ] =null; //声明数组
数组名称 = new 数据类型[长度]; // 分配内存给数组
另一种声明数组的方式:
数据类型[ ] 数组名称=null; //声明一维数组
数据的声明格式里,“数据类型”是声明数组元素的数据类型,常见的类型有整形、浮点型与字符型等。
栈内存:保存指向数组实体的地址的名称(数组名)
堆内存:保存数组中的数据
地址:
int score [ ]=null; //声明整形数组 score
score = new int[3]; //为整数型数组score分配内存空间,其元素个数为3
声明数组的同时分配内存:
int score[ ] = new int[10]; //声明一个元素个数为10 的整形数组score,同时开辟一块内存空间供其使用。
当声明一个整形数组score时,score可视为数组类型的变量,这个变量没有任何内容,编译器仅会在栈内存中分配一块内存给它,用来保存指向数组实体的地址的名称。如下图:
堆内存分配:
score = new int[3];
开辟了3个可供保存整数的内存空间,并把此内存空间的参考地址赋给score变量,内存分配的流程图如下图:
一个数组开辟了堆内存之后,将在堆内存中保存数据,并将堆内存的 操作地址给了数组名称score。
数组是引用数据类型,因此数组变量score所保存的并非是数组的实体,而是数组堆内存的参考地址。
数组声明的疑问:
为什么在数组的声明上要写一个“null”?如“int score[ ]=null;”
null表示引用数据类型的默认值,数组属于引用数据类型,对于引用数据类型来说其默认值就是null,表示暂时还没有任何指向的内存空间。在JDK1.5之后可以不用给数据默认值。
堆栈内存的解释:
数组操作中,在栈内存中保存的永远是数组的名称,只开辟了栈内存空间数组是永远无法使用的,必须有指向的堆内存才可以使用,要想开辟新的堆内存必须使用new关键字,然后是将此堆内存的使用权交给了对应的栈内存空间,而且一个堆内存空间可以同时被多个栈内存空间指向,即一个人可以有多个名字,人相当于堆内存,名字就相当于栈内存。