Java---数组与内存控制

来源:互联网 发布:哈布斯堡家族现状知乎 编辑:程序博客网 时间:2024/04/20 15:41

带着问题

  • 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维数组依次类推。

原创粉丝点击