数组的创建
要介绍数组,首先就要创建一个数组,Java中创建数组有几种方法,我们就以整型数组为例。
int[] array = {1, 2, 3, 4, 5};
int [] array1 = new int [] {1, 2, 3, 4, 5 };
这两种方法创建数组 [ ] 内是不能填数字的,编译器会根据数组初始化的内容确定数组长度。如果要确定数组的长度但不初始化数组内容可以使用下面这种定义方法
int [] array = new int [5];
这样创建的数组,它的长度就是5,内容会被初始化为全0,这也是我们比较常用的一种创建方法。
函数对数组传参
我们知道,在C语言中,我们通过函数来交换两个数的值时,需要用到传址调用,即,在函数传参时,将需要交换的实参的地址传过去,而不是单纯的将实参的值传过去。如果只传值,形参接收到的就只是实参的值而已,这时的形参可以说是实参的一份临时备份,改变形参的值并不会对实参有什么影响。而如果传参时传递的是实参的地址,这样形参接收的就是实参的地址,就可以通过对形参解引用找到实参存放的内容,并对其进行修改。但是,在Java中是没有指针的,所以我们不能取实参的地址传给形参的。这样,我们如果要通过函数去交换两个实参的值就会非常的麻烦。
因此,在 Java 中,我们在调用函数时,要交换两个参数的值,就可以通过在参数中传入数组来完成。我们定义的 array 这个数组名叫做引用,它里面存放的就是 array 这个数组的首元素的地址,也就是说,我们传参时把数组传过去,实际上就是在传一个地址,在函数中就可以通过这个地址找到要改变的数值。不过这其实也并不是真正的做到了交换两个整型变量的值,算是一种取巧的做法,说这个方法也只是介绍一下数组的传参。
二维数组
再稍微介绍一下二维数组的创建吧,我们知道,二维数组其实是特殊的一种一维数组,这一点在Java中表现的更明显。
在C语言中,二维数组的创建是这样的int array[2][3] = {1, 2, 3, 4, 5, 6};
两个中括号内的数字表示二维数组的行和列,花括号初始化数组内容,其中,第一个[ ] 中的数字,即,表示行数的数字,是可以省略的,编译器会根据列数以及初始化的内容判断需要几行来排列整个数组。
在Java中,定义的方法也与C有些许区别。
int [][] array = {{1,2,3}, {4,5,6}};
这样,就定义了一个和上面C语言同样的一个两行三列的二维数组。和一维数组的定义一样,也有其他两种方法
int [] [] array1 = new int [] [] {{1,2,3 }, {4,5,6}};
int [][] array2 = new int [2][3];
其中,array2的内容同样会被初始化为全0。
为什么说二维数组是特殊的一维数组,而且这一点在Java中表现更明显呢?我们可以把上面定义的两行三列二维数组当做是两个有三个元素的一维数组拼在一起,而 array 这个数组名,这个引用,存放的实际上是这两个数组的首元素地址。我们如果按这个逻辑来打印一下这个二维数组的长度就能很清楚的看到这一点了。
int[][] array = {{1,2,3}, {4,5,6}};
System.out.println(array.length);
打印出 array 的数组长度,这时候的结果是2,即,里面存放了两个元素。
我们再通过 for 循环遍历 array 数组,按照我们之前讲的,array 中存放的就是两个一维数组的地址,那如果我们打印出的结果是这两个一维数组的长度即可说明这一点。
for(int i = 0; i < array.length; i++) {
System.out.println(array[i].length);
}
这里打印出的结果是两个3,即,array[0] 和 array [1] 两个元素的长度是3。这两个打印结果就能很好的说明 array 这个二维数组就是两个一维数组拼在一起的,而且 array 存放的就是这两个一维数组的地址。