申明及初始化
- 申明方式及初始化方式
数组的申明及初始化
int[] arr = new int[5]; int arr[1] = 3;
int[] arr = {1,2,3,4};
/*不允许分开写,下面是错误的
int[] arr;
arr={1,2,3,4}
*/
int[] arr = new int[]{1,2,3,4}; //注意右边不需要指明长度
//允许这样写
int[] arr;
arr = new int[]{1,2,3,4}
- 注意点
- 数组是不能指定长度的
int[] nums = new int[4];
其中 int[] nums里的[]里面不能填入数字
所谓的数组长度其实是一个误区,new int[4]开辟了一个 4*4的内存块,这里才是长度,但这是内存的长度
nums所做的只是获取这个内存的引用,即获取这块内存的位置
所以说数组是无法指定长度的
- 数组会自动初始化
整型为0,boolean为false,字符型&字符串型为""(unicode的0),object为null
- 引用数组元素会初始化为null,所以在使用之前要创建对象并将引用赋值给元素,否则会出现空指向异常
Integer[] integers = new Integer[10];
这时候nums里面的元素指向是null
一旦元素进行运算就会发生java.lang.NullPointerException错误
eg:System.out.println(integers[0]+1);
需要重新给元素赋值 eg:a[0] = new Integer(1);
但如果只对其进行访问并不报错
eg:System.out.println(integers[0]);
结果:null
注意:这里因为integer[0]是integer包装类,所以如果里面有值,可以直接如上例输出
但如果引用数组里面的是普通类,就会如普通类一般输出引用地址
eg: Test[] tests = new Test[10];
tests[0] = new Test(null);
System.out.println(tests[0]);
结果:Day06.Test@383534aa
此外,引用数组如果只申明没有进行赋值,该元素(对象)因为指向为null,没有获取到内存的引用,
所以是不会执行析构函数的。
Object[] object = new Object[5];
object.num = 4;//这是错误的
object[0]里面是null的,会出现空指针异常