Java的参数传递的唯一方式:传值(By Value)

王朝java/jsp·作者佚名  2006-01-09
宽屏版  字体: |||超大  

之所以把这个问题拿出来重新分析一次,是因为我们操作Java的对象(Object)全是通过对象的引用(Object references),引用可以理解为指针,容易让人对应到C++的传址上面去。讨论讨论有百益而无一害嘛。

在传基本数据类型 变量时,直接传值不会让人费解;但当传递对象时,就应该理解为传递的是对象引用的值,但这个值并不是对象本身,而是指向该对象,即你让另一个引用指向了该对象。

--Java以By Value的方式传递Object reference。

以下面简单程序为例:

package test;

public class BlogTest

{

public void modifyAAA(int x, java.util.ArrayList list)

{

x += 5;

System.out.println("x=====" + x);

list.add(new java.util.Date());

System.out.println(list.size());

}

public static void main(String[] args)

{

BlogTest blogtest = new BlogTest();

int i = 5;

java.util.ArrayList list = new java.util.ArrayList();

System.out.println("i=======" + i);

System.out.println("list.size()==="+list.size());

blogtest.modifyAAA(i, list);

System.out.println("i==new==" + i);

System.out.println("list.size()====" + list.size());

}

}

/*

运行得到的结果是这样的

i=======5

list.size()===0

x=====10

1

i==new==5

list.size()==new==1

*/

这说明在参数传递过程中发生了以下事情:int 变量 i 被复制了一份给 int x,在modifyAAA()方法中改变了x的值并不会影响主函数中i的值,当然,这是变量生存区间不同,很好理解。但发现list对象的引用传到modifyAAA()方法的前后,主函数中的list也跟着发生了变化。这正说了在传递对象引用时,形参得到了实参对象的引用拷贝,两个引用都指向了同一list对象,所以形参改变了list同时也能反映到实参中来。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有