java 数组变量与数组对象
数组是否必须初始化 对于这个问题,关键在于要弄清楚数组变量和数组对象的差别。数组变量是存放在栈内存中的,数组对象是存放在堆内存中的。数组变量只是一个引用变量,他能够指向实际的数组对象。 所谓的数组初始化并非对数组变量初始化,而是对数组对象进行初始化。 public static void main(String[] args) { int [] num1 = new int[]{11,22,33,44,55}; int [] num2 = num1; int [] num3 = new int[]{1,2,3,4,5}; int [] num4 = null; int [] num5 = {}; num1 = num3; num3[2] = 0; num2[2] = num1[2]; System.out.println(num1[2]); System.out.println(num2[2]); System.out.println(num4[0]);//java.lang.NullPointerException System.out.println(num5[0]);//java.lang.ArrayIndexOutOfBoundsException: 0 } 1.java的数组变量是引用类型的变量 2.大部分时候,我们把数组变量和数组对象搞混了,数组变量只是一个引用变量(类似C里的指针),通常存放在栈内存中(也可放入堆内存中的);而数组对象就是保存在堆内存中的连续内存空间。对数组执行初始化,其实并不是对数组变量执行初始化,而是要对数组对象执行初始化---也就是为该数组对象分派一块连续的内存空间,这块连续内存空间的长度就是数组的长度。 对于数组变量来说,它并不需要进行所谓的初始化,只要让数组变量指向一个有效的数组对象,程序即可正常使用该数组变量了 3. 所有局部变量都是放在栈内存里保存的,不管其是基本类型的变量,还是引用类型的变量,都是存储在格子的方法栈区中;但引用类型变量所引用的对象(包括数组,普通java对象)则总是存储在堆内存中。