数组
数组是存储数据的容器,长度固定,且只能存储相同类型的数据
既可以存储基本类型数据,又可以存储引用类型数据
数组的定义
1.动态初始化
在定义数组时只指定数组的长度,由系统自动为元素赋初值,不同类型的元素有不同的默认值
格式:
数据类型[] 数组名 = new 数据类型[n]; //n指数组的长度
2.静态初始化
在定义数组的同时就为数组的每个元素赋值。数组的静态初始化有两种方式,具体格式如下:
1、类型[] 数组名 = new 类型[]{元素,元素,……};
2、类型[] 数组名 = {元素,元素,元素,……};
注意第一种方式中括号里不能写数组的长度,否则会编译失败,因为编译器认为你写的数字可能和后面元素的个数不符,存在安全隐患
小结:
1.定义数组后,数组元素就都有了默认值,根据存储元素的类型不同,默认值不同(如int类型的数组,默认值为0)
2.数组长度可以由length属性获得
3.数组通过索引来访问数组元素,索引从0 开始,最大的索引是 n-1
4.arr保存的是数组的首地址
5.int[] arr 与int arr[] 这两种写法都是可以的,Java一般采用第一种写法,C语言一般采用第二种写法
如何判断数组为空?
arr.length==0时,数组为空,[]
切记不可用arr==null来判断,因为arr是个变量,它存储的是数组的引用,绝不是null。
若是arr=null,则调用数组时会出现空指针异常
二维数组
二维数组在内存中仍然是一维数组。
定义格式
格式1:
数据类型[][] 数组名 = new 数据类型[m][n];
m: 代表二维数组中一维数组的个数
n: 代表每个一维数组中元素的个数
格式2:
数据类型[][] 数组名 = new 数据类型[m][];
m: 代表二维数组中一维数组的个数
每一个一维数组通过赋值来确定数组长度
以这种格式定义的二维数组如int[][] arr = new int[3][]; 是不能直接使用的,必须再初始化二维数组里面的一维数组如 arr[0] = new int[5]; arr[1] = new int[4];
格式3:
数据类型[][] 数组名 = {{元素值1,元素值2,..},{元素值1,元素值2,..},..};如
int[][] arr = { {1,4} ,{3,6,8}, {0,9,8} };
每个一维数组的长度可以不一样。
二维数组的内存
int[][] arr = new int[3][2];
[3]:二维数组中,有3个一维数组
[2]:三个一维数组中,每个数组的长度为2
运行程序时在堆内开辟的空间图为