Java SE中规定:使用Java数组之前必须先初始化数组,也就是为数组元素分配内存空间,并指定初始值。实际上,如果真正掌握了Java数组在内存中分配机制,那么完全可以换一个方式来初始化数组,或者说,数组无需经过初始化。
始终记住:Java 的数组变量是引用类型的变量,它并不是数组对象本身,只要让数组变量指向有效的数组对象,程序中即可使用该数组变量。示例如下。
public class ArrayTest3 { public static void main(String[] args) { //定义并初始化nums 数组 int[] nums = new int[]{3, 5, 20, 12}; //定义一个 prices 数组变量 int[] prices; //让 prices数组指向 nums 所引用的数组 prices = nums; for (int i = 0 ; i < prices.length ; i++ ) { System.out.println(prices[i]); } //将 prices数组的第 3个元素赋值为34 prices[2] = 34; //访问 nums数组的第3个元素,将看到输出34 System.out.println("nums数组的第 3个元素的值是:" + nums[2]); } }
从上面代码可以看出,程序定义了 prices 数组之后,并未对 prices 数组进行初始化。当执行 int[] prices;后的该数组变量还未指向任何有效的数组对象,此时的程序还不可使用prices 数组变量。当程序执行prices = nums;之后,prices 变量将指向nums变量所引用的数组,此时prices变量和nums变量引用同一个数组对象。执行这条语句之后,prices 变量已经指向有效的内存及一个长度为4的数组对象,因此程序完全可以正常使用prices 变量了。
对于Java 程序中所有的引用变量,它们都不需要经过所谓的初始化操作,需要进行初始化操作的是该引用变量所引用的对象。比如,数组变量不需要进行初始化操作,而数组对象本身需要进行初始化;对象的引用变量也不需要进行初始化,而对象本身才需要进行初始化。
转载请注明:零五宝典 » Java的数组使用前一定要初始化吗?不一定