带着问题
- Java数组的基本语法
- Java数组的静态特性
- Java数组的内存分配机制
- 初始化Java数组的两种方式
- 初始化基本类型数组的内存分配
- 初始化引用类型数组的内存分配
- 何时是数组引用变量,何时是数组对象
- 数组元素等同于变量
- 多维数组的内存分配
数组初始化
数组的初始化有两种方式
- 静态初始化
- 动态初始化
//静态初始化
String[] str= new String[]{"1","2","3"};
//动态初始化
String[] str2 = new String[5];
内存的分配:当数组初始化完成之后数组的长度就固定了,在内存中通过引用,上述中的str来指向这一块内存。str只是一个引用,改变它并不能改变内存中的数组。例如将str赋值为一个新的数组,并不能改变原来指向的数组。
通过数组来看内存分配:分清楚数组引用和数组对象,数组变量是一个引用,保存在栈内,而数组对象保存在堆中。所有局部变量都是存放栈内存;但是引用类型所引用的对象则总是在堆内存中。
基本类型数组的初始化
对于基本类型数组而言,数据元素的值直接存储在对应的数组元素中,因此初始化比较简单:程序直接先为数组分配内存空间,再将数据元素的值存入对应内存里。
int a[] = new int[2];
a
在栈空间中,不同于引用类型数组,由于基本类型的数组需要的内存小,所以a[0]
直接存的是值。
引用类型数组的初始化
引用类型的数组元素依然是引用类型,因此数组元素里存储的还是引用,它在堆中指向另一块内存。这块内存里存储了该引用变量所引用的对象。
使用数组
当数组引用变量指向一个邮箱的数组对象之后,程序就可以通过该数组引用变量来访问数组对象。
数组元素就是变量
还是需要强调一点的是所有数组引用在栈内存中,数组对象在堆内存中。务必要搞清楚这两个概念的区别。数组元素的使用与普通变量没有区别。
没有多维数组
所谓的多维数组,其实只是数组元素依然是数组的1维数组。
int a[][] = new int[2][2];
在上述代码中a[0]
和a[1]
是一个引用,分别指向了一个数组对象。而a[0][0]
也是一个引用,但是由于int是基本类型,所以这个引用直接存储了int类型的值。如果a[0][0]
不是基本类型,那么存储的是该类型的地址。3维数组依次类推。