// 两种先声明
int[] list1;
int list2[];
//两种创建
list1 = new int[3];
list2 = new int[] {1,2,3};
// 两种声明同时创建
int[] list3 = new int[3];
int list4[] = new int[3];
// 四种声明创建和赋值
int[] list5 = new int[] {1,2,3};
int[] list6 = {1,2,3};
int list7[] = new int[] {1,2,3};
int list8[] = {1,2,3};
//以下符值方法错误
//int[] list5 = new int[3]{1,2,3}
//int list7[] = new int[3] {1,2,3};
//给定数组初始值时不能指定大小
int list1[]=new int[5]; //默认情况下数组内容都为零
for(int i=0; i<list1.length; i++) {
list1[i]=i;
}
//两种遍历方法
for(int i=0;i<list1.length;i++){
System.out.println("list["+i+"]="+list1[i]);
}
for(int i:list1) {
System.out.println("list["+i+"]="+list1[i]);
}
输出:
方法一:
list[0]=0
list[1]=1
list[2]=2
list[3]=3
list[4]=4
方法二:
list[0]=0
list[1]=1
list[2]=2
list[3]=3
list[4]=4
//此处赋值是直接将b这个空间的地址赋值给a
//所以改变a会改变b
int[] a= new int[3];
int[] b= {1,2,3};
a=b;
a[0]=0;
System.out.println("b[0]="+b[0]);
输出:
b[0]=0
int a[];
a=new int[3];
int b[]=new int[4];
System.out.println("a="+a);
System.out.println("b="+b);
a=b;
System.out.println("a="+a);
for(int i=0;i<4;i++){
b[i]=i;
}
for(int i:a) {
System.out.println("a["+i+"]="+i);
}
输出:
a=[I@15db9742
b=[I@6d06d69c
a=[I@6d06d69c
a[0]=0
a[1]=1
a[2]=2
a[3]=3
从这里可以看出数组变量实际是存储堆中申请出空间的地址,直接对数组赋值时将空间地址给另一个数组变量,就是两个数组变量操作同一个空间里面储存的值。
int[] a=new int[5];
int[] b= {1,2,3};
System.out.println("a="+a);
System.out.println("b="+b);
for(int i=0;i<b.length&&i<a.length;i++){
a[i]=b[i];
}
System.out.println("a="+a);
a[0]=0;
System.out.println("a[0]="+a[0]);
System.out.println("b[0]="+b[0]);
System.out.println("a[3]="+a[3]);
输出:
a=[I@15db9742
b=[I@6d06d69c
a=[I@15db9742
a[0]=0
b[0]=1
a[3]=0
此方法不改变数组a的地址
int[] a=new int[5];
int[] b= {1,2,3};
System.out.println("a="+a);
System.out.println("b="+b);
a=Arrays.copyOf(b, 2);
System.out.println("a="+a);
a[0]=0;
System.out.println("a[0]="+a[0]);
System.out.println("b[0]="+b[0]);
System.out.println("a[2]="+a[2]);
输出:
a=[I@15db9742
b=[I@6d06d69c
a=[I@7852e922
a[0]=0
b[0]=1
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
代码中可以看出Arrays.copy()方法给a变量返回的值是重新申请空间的地址,且该地址的长度为Arrays.copy()第二个参数的值。
// 两种先声明
int[][] list1;
int list2[][];
//三种种创建
list1 = new int[3][];
list1 = new int[2][2];
//创建时,二维数组的行一定要指定,列可以指定,可以不指定
list2 = new int[][] {{1,2},{3}};
// 两种声明同时创建
int[][] list3 = new int[3][];
int list4[][] = new int[2][2];
// 四种声明创建和赋值
int[][] list5 = new int[][] {{1,2},{3}};
int[][] list6 = {{1},{2,3}};
int list7[][] = new int[][] {{1,2},{3}};
int list8[][] = {{1,2},{3}};
在这里说明一下int[][] list3 = new int[3][];
这句代码
int[][] a=new int[3][];
System.out.println("a="+a);
System.out.println("a[0]="+a[0]);
int[][] b=new int[3][5];
System.out.println("b="+b);
System.out.println("b[0]="+b[0]);
System.out.println("b[0][0]="+b[0][0]);
a[0]=new int[5];
System.out.println("a[0]="+a[0]);
System.out.println("a[0][0]="+a[0][0]);
输出:
a=[[I@15db9742
a[0]=null
b=[[I@6d06d69c
b[0]=[I@7852e922
b[0][0]=0
a[0]=[I@4e25154f
a[0][0]=0
输出结果可以看出int[][] a=new int[3][];
和int[][] a=new int[3][5];
的区别在于一个只申请了a这个空间,一个同时申请了a[]这些以为数组的空间。
取值与赋值和一维数组类似,其中比较特殊的是可以直接个二维数组的a[]变量赋一维数组的值
int[][] a=new int[3][];
a[0]=new int[2];
a[1]=new int[] {1,2,3};
int[] b= {1,2,3,4,5};
a[2]=b;
for(int[] i:a) {
for(int j:i) {
System.out.print(j+" ");
}
System.out.println();
}
输出:
0 0
1 2 3
1 2 3 4 5