数组与内存控制1

Java的数组是静态的,即当数组被初始化之后,该数组的长度是不可变的。Java程序中的数组必须经初始化才可以使用.所谓初始化,就是为数组对象的元素分配内存空间,并为每个数组元素指定初始值.

   数组的初始化有以下两种方式:

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

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

不管采用哪种方式初始化java数组,一旦初始化完成,该数组的长度就不可改变

public class ArrayTest_01 {

  public static void main(String[] args) {

    //采用静态初始化方式初始化第1个数组

    String[] books = new String[]{

      "javaoop",

      ".netoop",

      "javaweb",

      "sqlserver"

    };

   

    //采用静态初始化简化形式方式初始化第1个数组

    String[] names={

      "孙悟空",

      "猪八戒",

      "白骨精"

    }; 

    //采用动态初始化的语法初始化第3个数组

    String[] strArr = new String[5];

    //访问3个数组的长度

    System.out.println("第1个数组的长度:" + books.length);

    System.out.println("第2个数组的长度:" + names.length);

    System.out.println("第3个数组的长度:" + strArr.length);

  }

}

Java语言的数组变量是引用类型的变量,上例的内存示意图:

 

 




                                      

对于静态初始化方式而言,程序员无需要指定数组长度,指定该数组的数组元素,由系统来决定该数组的长度即可。执行动态初始化时,程序员只需指定数组长度,即为每个数组元素指定所需的内存空间,系统将负责为这些数组元素分配初始值(整数类型->0,浮点类型->0.0,字符类型->’u\0000’,布尔类型->false,引用类型)

   不要同时使用静态初始化和动态初始化。也就是说,不要在进行数组初始化时,即指定数组的长度,也为每个数组元素分配初始值. 

public class ArrayTest_02 {

  public static void main(String[] args) {

    //采用静态初始化方式初始化第1个数组

    String[] books = new String[]{

      "javaoop",

      ".netoop",

      "javaweb",

      "sqlserver"

    };

   

    //采用静态初始化简化形式方式初始化第1个数组

    String[] names={

      "孙悟空",

      "猪八戒",

      "白骨精"

    };

   

    //采用动态初始化的语法初始化第3个数组

    String[] strArr = new String[5];

   

    //让book数组变量、strArr数组变量指向names所引用的数组

    books = names;

    strArr = names;

    System.out.println("--------------");

    System.out.println("books数组的长度:" + books.length);

    System.out.println("strArr数组的长度:" + strArr.length);

    //改变books数组变量所引用的数组的第2个元素值

    books[1] = "唐僧";

    System.out.println("names数组的第二个元素是:" + books[1]);

  }

 

}

答案:

--------------

books数组的长度:3

strArr数组的长度:3

names数组的第二个元素是:唐僧

 

 

 

 

 

 

 

strArr

 

 

从上面程序中可以发现,books数组变量,strArr数组变量都指向names数组变量所引用的数组,这样做的结果是books、strArr、names着3个变量引用同一个数组对象,见图.

   这很容易造成一种假象:books数组的长度有4变成了3。实际上,数组对象本身的长度并没有发生变化,变的是books数组变量,从图中发现books变量所引用的数组的长度依然是4,但是不再有任何引用变量引用该数组,因此它将会变成垃圾,等着垃圾回收机制来回收.

 

本文转载于:王伟老师的空间文章 ,一切版权归王伟老师所有

posted @ 2011-04-09 22:34  wxifly  阅读(570)  评论(0编辑  收藏  举报