数组是存储数据的容器,长度固定,且只能存储相同类型的数据
既可以存储基本类型数据,又可以存储引用类型数据
数组的定义
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语言一般采用第二种写法
二维数组
二维数组是一个包含多个一维数组的数组,它的每个元素都是一个一维数组
定义格式
格式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 = new int[3][2];
[3]:二维数组中,有3个一维数组
[2]:三个一维数组中,每个数组的长度为2
运行程序时在堆内开辟的空间图为
问题:
数组名保存的是数组的首地址,字符数组呢?
1 int[][] arr2 = { {1,2},{3,4,5},{6,7,8,9,10} }; 2 String[] arr = {"abc","def"}; 3 char[] c = {'a','b'}; 4 System.out.println(arr2); 5 System.out.println(arr2[0]); 6 System.out.println(arr); 7 System.out.println(c);
[[I@4e25154f
[I@70dea4e
[Ljava.lang.String;@5c647e05
ab