一、Java数组是静态的

Java是典型的静态语言,Java数组自然也是静态的,即当数组被初始化后,数组的长度是不可变的;


二、何谓数组初始化

所谓数组初始化,就是在堆内存中为数组对象分配一块连续的内存空间,并为每个数组元素指定初始值。


三、数组初始化方式

有两种方式:

1、静态初始化:由程序员显式指定每个数组元素的初始值,由系统确定数组大小;

2、动态初始化:由程序员指定数组大小,由系统为每个数组元素分配初始值;


四、数组变量与数组对象


数组变量:

数组变量是一种引用变量类型(本质就是指针),创建在栈区中;(在Java中,所有的局部变量都存放在栈区中,不管是基本数据类型(int、short、long、byte、boolean、char、float等)变量,还是引用类型变量;Java中堆内存中的对象通常不允许直接访问,为了访问其中对象,只能通过栈区的引用对象)

如String[] books = new String[5];中books就是数组变量;


数组对象:

数组对象是“真正的数组”,创建在堆内存中;

对于基本类型的数组对象,数据元素值直接存放在初始化分配的内存空间中;而对于复杂类型(如String)的数组对象,初始化分配的内存空间同样为引用,引用(指向)常量池(Constant Pool)或其他内存区域的对象;

如String[] books = new String[5];中new String[5]就是数组对象;


它们的关系:

该数组变量,引用(指向)堆内存中数组对象;


总结:

所以请始终记住:Java的数组变量是引用类型的变量,他并不是数组对象本身,并不需要进行初始化,只要让数组变量指向堆内存中有效的数组对象,程序就可以使用该数组变量,该引用变量就会由它所引用的对象代替,系统就会自动变为访问堆内存中相应的数组对象。