概念:数组是相同类型的变量按顺序组成的一种复合数据类型(数组是一些类型相同的变量组成的集合),称这些相同类型的变量为数组的元素或单元。数组通过数组名加索引来使用数组的元素。
1. 声明数组
-
一维数组:
数组元素类型 数组名[];
数组元素类型 []数组名;
-
二维数组:
数组元素类型 数组名[] [];
数组元素类型 [] []数组名;
public class Hello { public static void main(String[] args) { int a[]; int []b; double c[][]; double [][]d; } }
-
数组类型相同时也可以这样 (两种声明方法)
public static void main(String[] args) { int a[],b[]; //声明一维数组a和b double c[][],d[][];//声明二维数组c和d int []boy,girl;//一维数组boy和girl boy=new int[4];//为数组分配元素,不懂下面有解释 girl=new int[4]; double [][]one,two;//二维数组one和two one=new double[2][2]; two=new double[2][2]; } }
-
注:与c/c++不同,Java不能在声明数组时在方括号内指定数组元素个数
int [23];或int [23]; 不允许,编译也不会通过
2. 为数组分配元素
-
上面声明数组仅仅给出了数组变量的名字和元素的数据类型。要想使用还得给数组分配元素
格式:
数组名=new 数组元素的类型[数组元素的个数];
例如:
int []boy,;//声明一维数组boy boy=new int[4];/*为数组分配元素,数组获得4个用来存放int类型数据的变量,即4个int型元素。*/ boy[0]=10;//给值10,下同 boy[1]=11; boy[2]=12; boy[3]=13;
数组变量boy中存放着这些元素的首地址,该地址称作数组的引用,这样数组就可以通过索引使用分配给他的变量,即操作它的元素。
数组属于引用型变量,数组变量中存放着数组的首元素的地址,通过数组变量的名字加索引使用数组的元素。
示意图:
-
声明数组和创建数组可以一起完成,二维也一样
float boy[]=new float[4]; float boy[][]=new float[4][3];
-
java 采用“数组的数组“声明多维数组,一个二维数组是若干个一维数组构成的,例如,4中boy就是由4个长度为3的的一维数组boy[0],boy[1],boy[2],boy[3]构成的。
public class Hello { public static void main(String[] args) { int a[][]=new int[4][3]; float b[]=new float[4]; System.out.println(a.length);//打印出a的长度 System.out.println(b.length); } } 结果: 4 4
-
和c不同,Java可以使用int型变量的值指定数组的元素个数。
int size=30; double a[]=new double[size];
3.数组元素使用
-
一维数组通过索引符访问自己的元素,如上面boy[0],boy[1]等。索引从零开始,数组有5(n)个元素,索引到4(n-1)为止。二维同样
public class Hello { public static void main(String[] args) { int a[][]= {{},{},{1,2,3},{},{}}; float b[]= {1,2,3,4,5}; System.out.println(a.length);//译为一个花括号为一个长度 System.out.println(b.length); System.out.println(a[2][2]);//译为第三个花括号,第三个值 System.out.println(b[0]);//第一个值 } } 结果: 5 5 3 1.0//因为数组b为float型所以为1.0
4. length的使用
public class Hello { public static void main(String[] args) { int a[][]=new int[4][3]; float b[]=new float[4]; System.out.println(a.length);//打印出a的长度 System.out.println(b.length); } } 结果: 4 4
结论:二维和一维都一样
5.数组初始化
直接赋值
public class Hello { public static void main(String[] args) { int a[][]= {{0,1},{3,4}}; float b[]= {1,2};// 创建的时候就可以给值 System.out.println(a[0][0]); System.out.println(b[0]+" "+b[1]); } } 结果: 0 1.0 2.0
上面数组等价于:(先创建,再复制)
public class Hello { public static void main(String[] args) { int a[][]= new int[2][2]; float b[]= new float[2]; a[0][0]=0; a[0][1]=1; a[1][0]=3; a[1][1]=4; b[0]=1; b[1]=2; System.out.println(a[0][0]); System.out.println(b[0]+" "+b[1]); } } 结果: 0 1.0 2.0
注意:不可以声明这样赋值:
int a[] []=new int[2] [2];
a[] []={{1,2}{0,1}};
6.数组的引用
-
两个相同类型的数组如果具有相同的引用,他们就有完全相同的元素
public class Hello1 { public static void main(String[] args) { int a[]= {1,2,3,4}; int b[]= {100,200,300}; System.out.println("数组a的个数为:"+a.length); System.out.println("数组b的个数为:"+b.length); System.out.println("数组a的引用:"+a); System.out.println("数组b的引用:"+b); a=b; System.out.println("数组a的个数为:"+a.length); System.out.println("数组b的个数为:"+b.length); System.out.println("a[0]="+a[0]+",a[1]="+a[1]+",a[2]="+a[2]); System.out.println("b[0]="+b[0]+",b[1]="+b[1]+",b[2]="+b[2]); } } 结果: 数组a的个数为:4 数组b的个数为:3 数组a的引用:[I@2ff4acd0 数组b的引用:[I@54bedef2 数组a的个数为:3 数组b的个数为:3 a[0]=100,a[1]=200,a[2]=300 b[0]=100,b[1]=200,b[2]=300
-
char型数组使用System.out.println(a)不会输出引用,而是输出数组a的全部元素值
public class Hello2 { public static void main(String[] args) { char a[]= {'努','力','学','习'}; System.out.println(a); System.out.println(" "+a);//输出引用正确方法 } } 结果: 努力学习 [C@2ff4acd0