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不是一块引用。不指向任何地址。