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

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

  数组初始化分为

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

    语法形式: 

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

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

     语法形式:

    int[] x = new int[5];

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

  

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

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

下面是内存原理图:

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

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

 

 

 堆内存的内存变化:

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

 

posted @ 2015-12-05 23:20  狼牙曼巴  阅读(575)  评论(0编辑  收藏  举报