概念:数组是相同类型的变量按顺序组成的一种复合数据类型(数组是一些类型相同的变量组成的集合),称这些相同类型的变量为数组的元素或单元。数组通过数组名加索引来使用数组的元素。
1. 声明数组
- 一维数组:
数组元素类型 数组名[];
数组元素类型 []数组名; - 二维数组:
数组元素类型 数组名[] [];
数组元素类型 [] []数组名;
public class Hello {
public static void main(String[] args) {
int a[];
int []b;
double c[][];
double [][]d;
}
}
- 数组类型相同时也可以这样 (两种声明方法)
1. 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];
1. float boy[][]=new float[4][3];
- java 采用“数组的数组“声明多维数组,一个二维数组是若干个一维数组构成的,例如,4中boy就是由4个长度为3的的一维数组
1. 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;
3. 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