java数组的初始化与内存分配

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/i_yjn/article/details/49621079

        java数组与java实例一样是引用数据类型。所谓引用数据类型,相似于c中的指针,就是给变量赋值的时候不是直接获得数据的值而是一种引用(即数据的地址)。例如

  int[] t1=new int[]{1,2};
  int[] t2=t1;

当有表达式t2[0]=000; t2[1]=1111; 时会有t1[0]=000; t1[1]=1111;。由此可见t1,t2同时指向了内存中的一块地址,改变t2数组行的值实际上是改变了该数组块的行的值。

       java语言是静态语言,也就是说java数组是静态的(javascript里的数组是动态的,可以对比一下),因此当数组初始化后,该数组所占用的内存空间、长度都是不可变的。应当注意的是这里说的内存空间和长度不变是数组对象的的不变而不是数组变量不变,数组变量是可以指向别的数组对象空间的。数组对象是创建数组时内存分配的一块空间,而数组变量仅是存储了该空间地址的一个变量而已。数组对象一旦创建便不会随数组变量的变化而变化也不会因没有数组变量的指向而消失,它只会在没有变量引用时被java的垃圾回收机制回收。

      java初始化的方式有两种,静态初始化方式和动态初始化方式,前者是给定数组对象的初始值,长度则由系统根据给定的初始值自行确定;后者是先给定数组的长度,对象的初始值由系统分配。例如:


      .。。。。。。。。。

      系统按如下规则为数组对象分配初始值

      1 整型数据类型byte,short,int,long,数组对象的初始值为0。

      2 浮点类型float,double,数组对象的初始值为0.0。

      3 字符类型char,数组对象的初始值为'\u0000'。

      4 布尔类型boolean,数组对象的初始值为false。

      5 引用数据类型类,接口,数组,数组元素的初始值为null。

      对数组对象的初始化本质上是对数组对象的初始化,即在堆内存中创建数组对象(为数组对象分配一块连续的内存地址),而不是对数组变量的初始化。因此,在创建一个数组对象时必须对其初始化(使用new申请对象时),定义一个数组变量时不用为其初始化,可以为其指定数组对象。

猜你喜欢

转载自blog.csdn.net/i_yjn/article/details/49621079