一、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的数组变量是引用类型的变量,他并不是数组对象本身,并不需要进行初始化,只要让数组变量指向堆内存中有效的数组对象,程序就可以使用该数组变量,该引用变量就会由它所引用的对象代替,系统就会自动变为访问堆内存中相应的数组对象。