JAVA的数组变量是引用类型的变量,并不是数组对象本身,只要让数组变量指向有效的数组对象,程序中就可使用该数组变量。声明数组只是得到了一个数组的引用并为该引用分配了存储空间,但是并没有给数组对象本身分配任何空间。想要给数组对象分配存储空间,必须进行初始化
* 默认初始化
数组元素相当于对象的成员变量,默认值跟成员变量的规则一样
int 0
float 0.0f
double 0.0
boolean false
char ' '
引用数据类型 null
* 静态初始化
在数组创建的地方进行初始化,采用这种初始化的方式,数组的存储空间的分配是由编译器完成的。当创建一个非基本类型的数组时,实际上创建的是引用数组,可以直接使用new在数组里创建元素
注:new可应用于基本类型的数组,但是不能应用于单个的基本类型
int[] arr1 = {1,2,3,4,5};
Integer[] arr2 = {new Integer(1), new Integer(2), new Integer(3)};
注:这种声明方式其实只是Java初始化数组的语法糖,其等价于int[] arr1 = new int[]{1,2,3,4,5};
* 动态初始化方式一
用new声明,之后分别初始化数组中的每个元素,声明时需指定数组大小
注:如果数组元素类型为基本数据类型,在完成new 操作之后,数组中的元素会自动初始化为空值,可以直接使用,但是数组元素为引用类型,在完成new操作之后,没有给引用类型赋值,就直接使用数组中的元素,会产生运行时异常
int[] array2 = new int[3];
array2[0] = 1;
array2[1] = 2;
array2[2] = 3;
* 动态初始化方式二
用new声明的同时初始化,这种方式不能指定数组的大小,数组大小由初始化列表中数据个数决定
int[] array3 = new int[]{1,2,3};
* 给数组的引用赋值
int[] arr1 = {1,2,3,4,5};
int[] arr2;
arr2 = arr1;
注:Java实际上没有多维数组,只有释为“数组的数组。”,因此可以方便地构造一个“不规则”数组,即数组的每一行有不同的长度:
int[][] balances = new int[LineNum + 1][];
for(int n = 0; n < balances.length; n++) {
balances[n] = new int[n+1];
}
System.out.println(Arrays.deepToString(balances));
其内存分配如图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/ce77dd2ef1c811123076ac91faccea77.png)