[java小笔记] 关于数组内存管理的理解

时间:2022-04-17 06:19:48

  数组是大多数编程语言都提供的一种复合结构,如果程序需要多个类型相同的变量时,就可以考虑定义一个数组,java语言的数组变量时引用类型的变量,因此具有java引用变量的特性。在使用数组之前必须对数组对象进行初始化,当所有的数组元素都被分配了合适的内存空间,并指定了初始值是,数组初始化完成。

  数组初始化分为

  1、静态初始化:初始化时由程序员显式指定每个数组元素的初始值,由系统决定数组的长度。

    语法形式:

    int[] y = {1,2,3,4,5};

  2、动态初始化:初始化时程序员只指定数组的长度,由系统为程序分配初始值。  

     语法形式:

    int[] x = new int[5];

  下面看一下静态初始化数组和动态初始化数组在内存中的分布情况

  

 //代码
public static void main(String[] args) { //采用静态初始化方式初始化第一个数组
String[] jops = new String[]{"工人","农民","官员","歌手"};
//采用静态初始化方式初始化第二个数组
String[] names = new String[]{"小张","小明","小刚"};
//采用动态初始化方式初始化第一个数组
String[] str = new String[5];
System.out.println("第一个数组的长度:"+jops.length);
System.out.println("第二个数组的长度:"+names.length);
System.out.println("第三个数组的长度:"+str.length);
}

三个数组的长度依次是4,3,5。

下面是内存原理图:

[java小笔记] 关于数组内存管理的理解

java数组是动态的,一旦数组初始化完成,数组元素的内存空间分配即结束,程序只能改变数组元素的值,而无法改变数组的长度。java的数组变量时一种引用类型的变量,数组变量并不是数组本身,它只是指向堆内存中的数据数组对象。通过以下代码我们可以看出数组对象在内存的中变化关系。

 jops = names;
str = names;
System.out.println("第一个数组的长度:"+jops.length);
System.out.println("第三个数组的长度:"+str.length);
jops[1] ="小李";
System.out.println("names数组的第二个元素:"+jops[1]);

堆内存的内存变化:

[java小笔记] 关于数组内存管理的理解

由此我们可以看出,java数组变量只是引用类型的变量,它并不是数组对象本身,只要让数组变量始终指向有效的数组对象,程序中即可使用该数组变量。