数组及其内存控制

作者:禅楼望月(http://www.cnblogs.com/yaoyinglong/

静态的Java数组

     Java语言是典型的静态语言,因而,数组也是静态的,即当该数组被初始化之后,该数组的长度是不可变的。

     java 语言的数组变量是引用类型,什么意思呢?意思就是,数组变量并不是数组本身,它只是指向堆内存中的数组对象。如:

      这3个变量以及各自引用的数组在内存中的分配如图:

     我们平时可以通过改变数组变量的指向,让它指向的堆内存中的其他数组对象(前提是他们的编译类型是兼容的),从表面上看起来好像是更改了数组的长度。但是其实我们只是让该数组变量指向了另一个数组对象,而原来的那个数组对象再没有其他数组变量指向的情况下等待垃圾回收。

     对数组变量来说,它并不需要进行所谓的初始化,只是让数组变量指向一个有效的数组对象即可。

     对Java程序来说,所有的引用类型的变量都不需要经过所谓的初始化,需要进行初始化的只是该引用变量所引用的对象。

     所有的局部变量都是存放在栈内存中,不管其是引用类型的变量还是基本类型的变量,都是存储在各自的方法栈区中;但引用类型变量所引用的对象(包括数组、普通的Java对象)则总是存储在堆内存中。

     对于Java,堆内存中的对象(不管是数组还是普通Java对象)通常不允许直接访问,为了访问堆内存中的对象,通常只能通过引用变量。

     数组变量都是存储在栈内存中的,但数组元素则作为数组对象的一部分被保存在堆内存中,无论它们是基本类型的数组元素还是引用类型的数组元素。

基本类型数组的初始化

     对于基本类型数组而言,数组元素的值直接存储在对应的数组元素中,因此程序直接为数组分配内存空间,再将数组元素的值存入对应的内存里即可。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。