您的位置:首页 > 编程语言 > Java开发

Java学习笔记之Java方法值传递

2015-01-24 09:32 253 查看
在Java中,方法的参数传递方式是值传递。

我们首先测试基本类型的值传递,基本类型参数的传递方式是复制该基本类型参数,把该基本类型数值的复制品传给方法做参数,该基本类型数值和它的复制品之间没有关联关系,互不影响。

看以下的例子:

public class PrimtiveTransferTest {

public static void wrap(int a,int b){

System.out.println("在wrap方法中交换之前a的值是" + a + ";b的值是" + b);

int temp;

temp = a;

a = b;

b = temp;

System.out.println("在wrap方法中交换之后a的值是" + a + ";b的值是" + b);

}

public static void main(String[] args) {

int a = 6;

int b = 9;

System.out.println("main方法中未调用wrap方法前,main方法中a的值是" + a + ";b的值是" + b);

wrap(a, b);

System.out.println("main方法中调用wrap方法交换过a、b之后,main方法中a的值是" + a + ";b的值是" + b);

}

}

输出结果是:

main方法中未调用wrap方法前,main方法中a的值是6;b的值是9

在wrap方法中交换之前a的值是6;b的值是9

在wrap方法中交换之后a的值是9;b的值是6

main方法中调用wrap方法交换过a、b之后,main方法中a的值是6;b的值是9

由此我们可以看出,在Java方法中如果参数是基本类型值,参数传递并没有影响原本的基本类型的值。

另外,如果是引用类型变量,那么传递的就是引用变量的复制品,实则两个引用变量指向的是同一个对象,如果通过其中任何一个引用变量改变了它所指向的实例对象,那么另外一个也会受到影响。

再看接下来这个例子:

public class ReferenceTransferTest{

public static void swap(DataWrap dw){

System.out.println("wrap方法中a成员变量的值是" + dw.a + ";b成员变量的值是" + dw.b);

int temp = dw.a;

dw.a = dw.b;

dw.b = temp;

System.out.println("wrap方法中交换以后a成员变量的值是" + dw.a + ";b成员变量的值是" + dw.b);

}

public static void main(String[] args) {

DataWrap dw = new DataWrap();

dw.a = 6;

dw.b = 9;

swap(dw);

System.out.println("main方法中交换结束后a成员变量的值是" + dw.a + ";b成员变量的值是" + dw.b);

}

}

输出结果是:

main方法中通过wrap方法交换结束前,main方法中a成员变量的值是6;b成员变量的值是9

wrap方法中a成员变量的值是6;b成员变量的值是9

wrap方法中交换以后a成员变量的值是9;b成员变量的值是6

main方法中通过wrap方法交换结束后,main方法中a成员变量的值是9;b成员变量的值是6

本例中的参数传递方式就是值传递方法,系统复制了dw的副本,传入wrap方法,但是dw只是一个引用变量,所以系统复制了引用变量,而并未复制DataWrap对象,因此dw和它的复制品指向同一个DataWrap对象,因此该对象中成员变量的改变,会对两个引用变量都有影响。

摘抄编辑自《疯狂Java讲义》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: