public class Ex2 {
public static void main(String[] args) {
int[] a = {1,2,3,4,5};
expand(a);
changeArray(a);
printArray(a);
}
public static void expand(int[] a){
int[] newArray = new int[a.length * 2];
System.arraycopy(a, 0, newArray, 0, a.length);
// a[0]=999; // 在调用a对象之前。指向的是参数元素的地址,会改变原数组
a = newArray;
//a[0]=111; // 调用a对象之后,生成了一个副本。其后所有的都是副本,对原数组无影响
}
public static void changeArray(int[] a){
a[0] = 10;
}
public static void printArray(int[] a){
for(int i = 0; i<a.length; i++){
System.out.print(a[i] + "\t");
}
System.out.println();
}
}
A. 10 2 3 4 5
B. 1 2 3 4 5
C. 10 2 3 4 5 0 0 0 0 0
D. 1 2 3 4 5 0 0 0 0 0
结果为A。
而在expand方法中,a[0]=999会改变main方法中的a数组,
a=newArray之后的a[0]=111改变的只是newArray和方法中的副本数组a