JAVA数组类型使用及内存解析(第12节)

JAVA中数组的概念

数组是相同类型数据的有序集合。数组描述的是相同类型的若干个数据,按照一定的先后顺序排列组合而成。
其中,每个数据称作一个元素,每个元素通过索引(下标)来访问他们。

数组的5个基本特征:

1 数组的长度是确定的,一旦被创建,长度就不可被改变;
2 数组元素的类型可以是任何数据类型,包括基础类型和引用类型;
3 数组元素的类型必须是相同类型,不允许出现混合类型;
4 数组变量属于引用类型,数组本质上也是对象;
5 数组是有索引的,索引从0开始,到数组(length-1)结束;
PS:数组中的每个元素相当于该对象的的成员变量。JAVA中的对象是在堆中的,
  因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中存储的。

// 创建数组
int[] arr = new int[4];

// 赋值
arr[0] = 12;
arr[1] = 22;
arr[2] = 30;
arr[3] = 41;

// 可覆盖赋值
arr[2] = 35;

// 数组内值的使用
System.out.println(arr[2]); // 35

// arr[4]; //请求超出数组长度的数据会报数组越界:ArrayIndexOutOfBoundsException

// 获取数组长度
System.out.println(arr.length); // 4

 

数组内存存储理解

1 数组变量本身是存储在“栈”中,数组内的值存储在“堆”中
2 数组变量本身存储的是“堆”中索引为0的值的内存位置,
  如:int类型数组内值占4个字节,若索引为0的值内存位为0X01,则索引为1的值内存位为0X05。。。
  索引为3的值内存位为0XD,以此类推,每次增加一个类型字节数(内存位采用16进制记号)
3 创建数组时,数组内的值都有默认值,默认值根数组值类型有关系,详细如下:
  byte[] 默认值:0
  short[] 默认值:0
  int[] 默认值:0
  long[] 默认值:0
  float[] 默认值:0.0
  double[] 默认值:0.0
  char[] 默认值:'\u0000'
  boolean[] 默认值:false
  引用数据类型的数组: null

详情见下图:

 

数组初始化分三种方式:


1 静态初始化:定义数组、为数组分配空间、给数组赋值同时进行;
2 动态初始化:定义数组与为数组分配空间、给数组赋值分开操作;
3 默认初始化:数组本身是引用类型,在数组创建并设定好长度后,
  数组内每个元素的值已经有了默认值,默认值的具体值跟数组类型有关;

// 数组初始化分三种方式:
// 1 静态初始化:定义数组、为数组分配空间、给数组赋值同时进行
// 如:
double[] arr1 = {0.1,1.3};
double[] arr2 = new double[]{0.1,1.3};
// 2 动态初始化:定义数组与为数组分配空间、给数组赋值分开操作
// 如:
int[] arr3;
arr3 = new int[3];
arr3[0] = 111;
arr3[1] = 222;
arr3[2] = 333;
// 3 默认初始化:数组本身是引用类型,在数组创建并设定好长度后,数组内每个元素的值已经有了默认值,默认值的具体值跟数组类型有关
// 如:
char[] arr4 = new char[3];// 默认值为:'\u0000'
System.out.println(arr4[2]);//空字符
System.out.println("上面是空字符");

 

PS:调用方法传递数组参数时,是把实参的内存地址传给形参,即实参和形参指向的是内存“堆”中的同一个数组变量;

内存图如下:

 

posted @ 2022-01-18 18:04  风铃如沧海  阅读(68)  评论(0编辑  收藏  举报