//一维数组的定义 int[] arr1 = new int[3];//arr1 = {1,2,3}; 错误 int[] arr2 = new int[]{1,2,3};//int[] arr2 = new int[3]{1,2,3}; 错误 int arr3[] = {4,5,6}; //二维数组的定义 //二维数组中一维数组长度一致的数组 int[][] arr4 = new int[2][3]; //二维数组中一维数组长度不一致的数组 2个一维数组 一个长度2 一个长度3 int[][] arr5 = new int[2][]; arr5[0] = new int[2]; arr5[1] = new int[3]; //遍历 for(int[] i : arr5){ for(int k : i){ System.out.println(k); if(k == i.length - 3) System.out.print("good");//这里边有个有趣的问题 } }
ps
- 数组声明时,int[] arr 与 int arr[] 都是可以的
int[] arr2 = new int[]{1,2,3}; int arr3[] = {4,5,6};
- 初始化时,才能使用大括号{, , ,},声明完arr1 ,如果赋值是这样 arr1 = {1,2,3};是错误的,应该单独赋值或使用循环,arr1[0] = 1
- 初始化时,使用大括号时不应该数组加长度 ,int[] arr2 = new int[3]{1,2,3};这个语句是错误的
int[] arr2 = new int[]{1,2,3}; int arr3[] = {4,5,6};
- 再使用foreach遍历的时候,以上输出代码的结果是
0 0 0 good0 good0 good
二维数组arr5是没有被初始化的,所以默认值都是0,为什么我代码中写的是 k == i.length - 3 会输出后三个good 呢,k的默认值可都是0,所以原因就是,这个i的长度会变化,长度变化的原因其实就是这是两个int[] i 数组,第一个数组长度是2 第二个长度是3
//如果我把代码修改为 k == i.length - 2 //则输出结果就为 0 good0 good0 0 0 //原因在于 当遇到第一个数组时,长度是2,所以会执行语句,当遇到第二个一维数组时,因为长度是3,所以 //i.length - 1 为1,所以不等于k(默认为0)
综上所述,意思就是说,第二个foreach其实是连续遍历其中的所有一维数组。
- 还有在二维数组中,直接使用arr5.length 返回的是二维数组中一维数组个数,arr5[0].length 返回的是其中这个一维数组的长度