〇、数组是什么
数组是多个相同类型的数据的集合。通常,我们可以通过 arrName[index] 的方式来访问其中的数据。
在 JAVA 中,数组是对象。存储不同类型的数据的数组属于不同的类。所有数组类都是 Object 类的子类。数组有一个公有的属性 length ,表明这个数组可以存储多少元素。
由于数组都是对象,数组名都是属于引用数据类型。它们表示的都是它们的地址。数组名表示的地址指向该数组的首个元素的存储位置。在内存中,数组中的元素按顺序地、相邻排布。
一、数组的创建和初始化
数组是对象。数组的创建就是对象的实例化。数组可以用以下方式来创建:
char[] array0;//0
int[] array1 = new int[3]; //1
boolean[] array2 = new boolean[] { true, false }; //2
//boolean[] array2 = new boolean[2] { true, false }; //不可以
Double[] array3 = { 5.4, 24, -53.98 }; //3 等价于 Double[] array3 = new Double[] { 5.4, 24, -53.98 };
Object[] array4 = new Object[12];//4
//0 只是声明了一个数组,即一个引用类型的变量。它只能存储 char 数据。没有指定其长度。它的值是 null。
//1 创建了长度为 3 的、只能存储 int 数据的数组。这样创建的数组没有指定其中元素的初始值,数组中的各元素的值都会是默认的值,即 boolean 为 false,其他基本数据类型为 0,引用数据类型为 null。
//2 创建了长度为 2 的、只能存储 boolean 数据的数组。这样创建的数组中的各元素有其初始值。数组长度由花括号中的元素个数来决定。如果要用这种方式来创建数组,不能在方括号中写数组长度。
//3 与 Double[ ] array3 = new Double[ ] { 5.4, 24, -53.98 }; 是相同的。
//4 数组也能存储指定数据类型的子类对象。这里我们创建了一个可以存储 Object 对象的数组。它也可以存储 Object 类的所有子类的对象。也就是说,它可以存储所有类型的对象。
上面的第二种方式和第三种方式都在创建数组时对其中元素初始化了。然而 //3 的初始化方式只能在声明数组的同时使用。初始化的方式如下:
array0 = new char[3]; //可以
array0 = new char[] { '3', 'f', '[', 'x' }; //可以
//array0 = { '3', 'f', '[', 'x' }; //不可以
String[] array5 = new String[] { "", "", "" }; //可以
//String[] array5 = new String[3] { "", "", "" }; //不可以
二、数组作为参数和返回值
数组就是对象,可以作为参数和返回值:
int[] createArray() {
return new int[4];
}
double sum(double[] arr) {
//...
}
三、处理
通常可以用 for 循环来处理数组:
double sum(double[] arr) {
double result = 0.0;
for (int i = 0; i < arr.length; i++) {
result += arr[i];
}
return result;
}
也可以用 foreach 来处理:
double sum(double[] arr) {
double result = 0.0;
for (double d : arr) {
result += d;
}
return result;
}
其中,foreach 循环创建了一个临时的变量 d 作为数组中元素的副本,并依次遍历各个元素。
四、多维数组
可以把相同类型的数组存入同一个数组。这样,一个数组的元素就是其他的数组。这样的数组叫作多维数组。
我们可以通过下面的方式来创建多维数组:
int[][] array6;
double[][] array7 = new double[3][2];//7
long[][] array8 = new long[2][];//8
char[][][] array9 = new char[4][5][6];
//7 创建了一个长度为 3 的数组,其中的元素都是长度为 2 的数组。
//8 创建了一个长度为 2 的数组,其中的元素是长度未指定的数组。
也可以通过上面演示的花括号来初始化多维数组。可以在花括号中使用花括号来表示数组,也可以在花括号中使用已有的数组来初始化。
array7 、 array8 、 array9 中存放的都是数组的地址。array9[0] 也是数组的地址。
array7 中总共可以存放 6 个 double 数据。不过,不能肯定 array8 中总共能存放多少 long 数据。因为其中的子数组的长度未指定。在下面的例子中,同一个二维数组中的子数组的长度不同。
array8[0] = new long[4];
array8[1] = new long[8];
因此不能认为二维数组“与矩阵类似”。