本帖最后由 a80C51 于 2015-9-1 22:31 编辑
方法的参数传递机制 只有一种:值传递,即将实际参数值得副本,传入方法内。 解释如下: 回归到一个最经典的错误: publicclass hehe { public static void swap(int a , int b) { int tmp = a; a = b; b = tmp; System.out.println("swap方法里,a的值是" + a + ";b的值是" + b); } public static void main(String[] args) { int a = 6; int b = 9; swap(a , b); System.out.println("交换结束后,变量a的值是" + a + ";变量b的值是" + b); } } 分析: 实际上,在main方法调用swap方法时,main方法还未结束,故系统会分配两块栈区来处理数据。根据值传递定义,传递给swap的a和b的值,只不过是main方法的副本,故无论swap内部如何交换,都不会对main方法中的a,b有影响。
而如果采用引用型参数传递时,其运行的原理,也是值传递,只是它传递的是引用对象的地址。也就是说,无论是采用数组,还是对象,其都是在堆内存中划分一块区域用于存放对象或者数组本身。而在栈内存中,存放对该对象或数组的引用,即所谓的地址。故此种方法可以达到交换数据的目的。
代码如下
classDataswap
{
int a;
int b;
}
public static void swapNums(Dataswap dw)
{
int temp;
temp = dw.a;
dw.a = dw.b;
dw.b = temp;
}
|