文章目录

  • 1 数组初始化
  • 1.1 数组是静态的
  • 1.2 是谁需要初始化?
  • 2 使用数组

    当数组的所有元素都被分配了合适的内存空间,并指定了初始值时,数组初始化完成。程序以后将不能重新改变数组对象在内存中的位置和大小。

1 数组初始化

1.1 数组是静态的

    Java语言的数组变量是引用类型的变量,因此具有Java独有的特性。
    Java的数组是静态的,即当数组被初始化之后,该数组的长度是不可变的。Java程序中的数组必须经初始化才可使用。所谓初始化,就是为数组对象的元素分配内存空间,并为每个数组元素指定初始值。
    数组的初始化有以下两种方式:

  1. 静态初始化:初始化时由程序员显式指定每个数组元素的初始值,由系统决定数组长度。
  2. 动态初始化:初始化时程序员只指定数组长度,由系统为数组元素分配初始值。

指定初始值时,系统将按如下规则分配初始值。

  1. 数组元素的类型是基本类型中的整数类型(byte、shor、int和long),则数组元素的值是0。
  2. 数组元素的类型是基本类型中的浮点类型(foat、 double),则数组元素的值是0.0。
  3. 数组元素的类型是基本类型中的字符类型(char),则数组元素的值是‘\u000’
  4. 数组元素的类型是基本类型中的布尔类型( boolean),则数组元素的值是 false
  5. 数组元素的类型是引用类型(类、接口和数组),则数组元素的值是null

    虽然数据在初始化后,长度不可变,但是因为数组是引用变量,可以通过改变数组元素指向内存中的数组对象,达到数组可变的效果。

1.2 是谁需要初始化?

    虽然都说数组需要初始化后才能使用,也就是为数组元素分配空间,并指定初始值。但是这里我们需要区分数据变量和数组对象(也可称为一个实例)。根据JVM结构,局部变量的存储位置是在栈中,而对象的存储位置是在堆中,在栈中的只是引用变量,引用变量不需要初始化,而存储在堆中的对象实例,才需要初始化。因此我们可以看下面一个例子:

int[] nums =new int[] {1,2,3,4};
int[] nums2 = nums1;

    这里有两个变量,nums和nums2,但是他们都指向同一个数组对象,所以也就需要在创建对象时,初始化一次即可。

2 使用数组

    数组使用,只有一点需要说明,Java中没有多阶数组这一说:
···
nums[][]
···
两个方括号,意味着一个一维数组的元素也是一个一维数组。