java 数组与内存控制

来源:互联网 发布:长征五号发射失败 知乎 编辑:程序博客网 时间:2024/04/19 19:02

java数组是静态的

java语言是静态的,js,python和php等则是动态的,动态语言在运行过程中可以添加东西,数组的大小可以在运行期间进行增加,和类里面的方法,数组的初始化有两种方式,一种是静态初始化,另一种是动态的初始化,静态初始化就是显示的指定每个数组元素的初始值,由系统决定数组的长度,动态初始化就是指定数组的长度,由系统为数组分配初始值。但是不管采用哪种初始化的方式,一旦其长度指定后将不可以修改,下面通过代码展现这两种初始化的方式。

String []wechat = new String []{"IT90s最前线","表白大师"};
String []wechat = new String [2];
(第一种为静态初始化,第二种为动态初始化。)

系统初始化时将按下列规则进行分配初始化值

整数类型;0     浮点类型:0.0     字符类型: ’\u0000‘    布尔类型 :false  应用类型 ;null;

java中的数组变量是一个引用变量,并不代表数组本身,好比是一个指针,它指向一个数组对象,所以说可以对这个引用变量进行赋值,从而会造成一种数组的长度改变的假象。代码展示:

String []wechat  = new String ["IT90s最前线"];String []qq = wechat;
现在我们就可以不需要对qq进行初始化,而当前qq数组就和wechat是一样的。它们指向堆内存中的同一块存储空间。

数组不一定要初始化

java中的数组变量是引用类型的变量他并是不是数组对象的本身,只要让数组变量指向有效数组对象,程序就可以使用该数组变量,也就是说当你声明了一个数组变量,可以不对她进行初始化,而直接将一个已经初始化过的值赋给它。

基本类型数组的初始化和引用类型的初始化内存分配机制

两者在内存非配上其实是大同小异,或者说直接就是一样的,唯一的区别就是基本类型数据类型并没有具体的指向,而引用类型有自己的具体指向,将在对内存中开辟出一段空间,并且指向该内存空间。

到这里可能会有一个疑问产生那就是如果我在数组中的元素是一个引用类型,如果该引用类型继续指向一个引用类型不就可以无限的继续下去了,无穷无尽的了,当时自己也在考虑这个问题,再就是如果一个多维数组的话,这样不也是可以继续的指下去了吗?问题出来了。

Person [] wechat;
好比这一个,我们自定义的一个类,里面盛放的是一个个的引用,每一个引用都指向一个对象,第一个假想也就不攻自破了,我的每一个元素最终是指向的一个对象,在对内存中开辟的一个对象的存储空间,而不是一个引用,所以说是无法进行下去的,第二个问题,多维数组最终都是有自己的一个指向的,最关键的一个因素就是java是一个强类型的语言,而不是向javascript那样的弱语言是可以随便的变化数据类型的。

对于多维数组,将其看做一维数组,没有多维只有一维,简化为一维之后理解起来就很简单了。



0 0