空数组异常

String[] strArrayAdd(String[] arr1,String[] arr2){
String[] arr=null;
[color=red]if(arr1.length!=0){[/color]
arr=new String[arr1.length+arr2.length];
for(int i=0;i<arr1.length;i++){
System.out.println("excute");
arr[i]=arr1[i];
}
}else{
arr=new String[arr2.length];
}

for(int i=arr1.length;i<arr.length;i++){
arr[i]=arr2[i-arr1.length];
}
return arr;
}
我这里的arr1如果是空的,就出现空指针异常,为什么啊?

[quote]arr1如果不为空的话,如果不是的话那么它到底是什么呢?[/quote]

根据虚拟机规范,它指向的是一块堆空间。含有length信息,以及数组中的元素。

[b]因为你的if判断中,使用到了 arr1.length[/b]

[color=blue][b]在arr1为null的情况下,arr1.length这个表达式就会报 空指针异常[/b][/color]

arr1根本就不存在 是null

null怎么会有 length属性?

arr1 = new String[0];

arr1.length 才会等于0;

[code="java"]
String[] strArrayAdd(String[] arr1,String[] arr2){
String[] arr=null;
[color=darkred]if(arr1!=null && arr1.length!=0){ [/color]
arr=new String[arr1.length+arr2.length];
for(int i=0;i<arr1.length;i++){
System.out.println("excute");
arr[i]=arr1[i];
}
}else{
arr=new String[arr2.length];
}
for(int i=arr1.length;i<arr.length;i++){
arr[i]=arr2[i-arr1.length];
}
return arr;
}

[/code]

[quote]哦,那么这里的arr1是不是也是一块地址的引用呢?指向这个数组的地址? [/quote]

String[] arr1 = null;

arr1不是一块引用。不指向任何地址。