Java数组(基本+内存分析)
一、数组概念
数组即为多个相同数据类型数据的数据按一定顺序排列的集合。二、数组的特点
1、数组有数组名、索引、元素、素组长度;2、数组的元素可以是基本数据类型也可以是引用数据类型;
3、数组的长度一旦确定便不可更改;
4、数组的在内存中表现为连续的存储单元,数组名引用的是首地址;
三、数组分类
按照维度分可以分为一维数组和多维数组;按照元素类型分可以分为基本类型元素数组和引用数据类型元素数组。四、初始化默认值
五、一维数组
初始化
1、动态初始化:动态初始化便是数组声明和赋值分别进行。例如:int array[] = new int[3]; array[0] = 1; array[1] = 2; array[2] = 3;
int []array = {1,2,3,4,5};
内存分析
内存结构简图:用以下代码分析内存:
int []id = new int[3]; id[1] = 12; id[2] = 56; id[3] = 45;
定义数组后:
数组赋值以后:
从上不难看出:当创建一个数组是(即new一个数组),首先在栈空间出现数组名,在堆空间开辟出连续的存储空间,并且数组名指向连续存储空间的首地址,存储空间的存储值均为默认值。
六、二维数组
概述
上文中提到,数组的元素数据类型可以为基本数据类型和引用数据类型,一维数组中元素就是基本数据类型数据,例如int、double等;而二维数组实际上就是将一维数组的元素由基本数据类型变为了引用数据类型,在一维数组中在存入数组,所以从根本来看,不存在二维数组。初始化
1.1、动态初始化格式一:int [][]array = new int[3][2];
实际上即使有一个一维数组(也可以理解为三个一维数组),数组有三个元素,这三个元素均为数组,且数组均存了两个元素;图示如图:
1.2、动态初始化格式二:
int [][]array = new int[3][];
这里与方式一不同,方式一是一维数组的三个元素均为数组,而这里三个元素均为null,可以对每个一维数组进行初始化:
array[0] = new int[3]; array[1] = new int[6]; array[2] = new int[8];
内存分析
二维数组的内存实则和一维数组没有本质区别。只是将一维数组存的数据改为了另一个数组的首地址。