好久没有编程了,今天突然想写点程序,谁知道这个数组的赋值问题给难住了,忘了以前老师说过的,测试程序调用处理类时候,在主程序运行的空间之外又开辟了一块空间,等处理类处理完了后,在返回到主程序的运行空间。

问题是这样滴:我在测试程序中定义了一个int型的数组并给数组每个元素赋了值,然后调用处理类把数组给倒置过来,这个问题是相当简单的。在处理类中第一种方法是:直接写个类成员函数,调用方便,传进去要处理的数组,弄个temp缓冲空间,把数组的头尾开始交换,程序运行很正常

static void reversel(int[] a){
int n=a.length;
int m=n/2;
int temp;
for(int
i=0;i
temp=a[i];
a[i]=a[n-1-i];
a[n-1-i]=temp;
}
}

第二种方法用了一个新的int型数组b,把要处理的数组从尾到头地依次赋值给b数组,再把数组不中的值倒到a数组中,这种方法的空间就要比上一个大多了。但是当把b数组再给a数组赋值时,出现了问题:用1语句还是用2语句,实践出来了,还是用2语句。如果用1语句,当在测试程序中依次打印倒置后的a数组的值时,还是和没有处理过的一样,这是为什么呢~~想了好久……

public void reversel1(){
int n=a.length;
int[] b=new int[n];
for(int
i=0;i
b[i]=a[n-1-i];
} a=b; 1 for(int
i=0;i
a[i]=b[i];
} 2 }

测试主程序开辟空间运行时候,调用了处理类,此时主程序要给处理类开辟新空间,等处理类运行完后又回到主程序刚才调用处理类的缺口,接着运行主程序。在调用处理类时,用1语句时候只是把引用给赋了值,a和b同时指向处理过的这段空间,但是,还没有把处理的结果给真正地返回给主程序中的a数组。所以,当处理程序执行完后,这段空间就给清掉了,所以a数组等于没有什么影响,给没有处理是一样的。

但用2语句就不同了,它直接把b数组的处理结果一个一个给主程序的a数组赋值,影响到了主程序。所以得到了想要的倒置结果。

经过这么一折腾,在写程序时候注意了,数组的赋值、程序运行时候主程序和子程序的空间分配问题。呵呵,加油