在Java中,数组的工作方式和C/C++不同
一维数组
一维数组本质上是一连串类型相同的变量。为创建数组,首先必须创建期望类型的数组变量。
<code>example:int month_days[]; </code>
剖析:尽管这个声明确立了month_days是数组变量的事实,但这个数组实际上并不存在。为了将它链接到一个实际的、物理的整数数组,必须使用new分配一个数组,并赋值给month_days。new是一个用于分配内存的特殊运算符,Java是动态分配的,可以通过索引方法来访问数组中特定元素。
<code>array-var = new type [size];
month_days = new int[12];</code>
合并后就是:
<code>int month_days[] = new int[12];</code>
初始化:
<code>int month_days[] = {31,28,31,30,31,30,31,31,30,31,30,31};</code>
type指定了要分配的数据类型,size指定了数组中元素的数量,array-var是链接到数组的数组变量,即为了使用new分配一个数组,必须指定要分配元素的类型和数量,通过new分配的数组,元素会自动初始化为0,false,null(对于引用类型)
So:获得一个数组需要两个步骤:
1、必须声明一个期望数组类型的变量。
2、必须使用new分配容纳该数组的内存,然后赋值给数组变量
多维数组
*当为多维数组分配内存时,只需要为第一维分配内存,可以单独为余下的维分配内存 *
<code>
int twoD[][] = new int[4][];
twoD[0] = new int[5];
twoD[1] = new int[5];
twoD[2] = new int[5];
twoD[3] = new int[5];
</code>
虽然对于这种情况单独分配第二维没有优点,但对于其他情况可能有优点。例如:当手动分配维数时,不必为每一维分配相同数量的元素。 下面创建一个二维数组,第二维的长度不是相同的:
<code>
int twoD[][] = new int[4][];
twoD[0] = new int[1];
twoD[1] = new int[2];
twoD[2] = new int[3];
twoD[3] = new int[4];
int i,j,k = 0;
for(i = 0; i < 4; i++){
for(j = 0; j < i + 1;j++){
twoD[i][j] = k;
k++;
}
}
for(i = 0; i < 4; i++){
for(j = 0; j < i + 1;j++){
System.out.print(twoD[i][j] + " ");
}
}
输出:
0
1 2
3 4 5
6 7 8 9
</code>
- 除了上述提及到的声明方式,还有一种 type[] var-name;
<code>
int a1[] = new int[3];
int[] a2 = new int[3]; //两者等价
////////////////////////////////
char twod1[][] = new char[3][4];
char[][] twod2 = new char[3][4]; //两者等价
//声明多个数组时,这种形式比较便利
int[] nuts ,nums2,num3;
</code> - 在数组初始化器也可以使用表达式以及字面值