首页 > 编程语言 > 详细

Java方法中引用类型的形参传递问题

时间:2015-03-26 17:47:11      阅读:161      评论:0      收藏:0      [点我收藏+]

众所周知,Java方法的形参如果是基本类型,是值传递,也就是说实参将数值传递给形参后,形参对值的操作跟实参变量毫无关系,举例:

public static void change(int a, int b){
	a = a + b; 
}
int c = 1, d = 2;

change(c , d);

这时输出c, 其值还是1。


假如是引用类型作为形参:

public static void change(Object a , Object b){
<pre name="code" class="java">	Object temp = a ;
<pre name="code" class="java">	a = b;
<pre name="code" class="java">	b = temp;
}



Object c = new Object();

Object d = new Object();

change(c , d);

这时,形参a是一个新的引用,指向c引用的内容,形参b是一个新的指向d的引用,也就是a、c同时指向内存中的一个位置,b、d同时指向内存中的另一个位置。那么此时在方法中交换的引用是a、b两个引用指向的地址,此时对c、d的引用、内容均没有影响,但,如果在方法中c.xxx = newValue,那么此时a、c共同指向的内存中的内容发生了改变。


那么,如何更改对象数组中的两个元素的引用呢?

change(array[ObjectA] , array[ObjectB]);

这样肯定是不行的,此时,我们要把数组的引用传递给方法:

public static void change(Object[] , int indexA , int indexB){//把将要传递引用的数组元素的下标 传递给 形参
<pre name="code" class="java"><pre name="code" class="java"><pre name="code" class="java">	Object temp = Object[indexA];
<pre name="code" class="java"><pre name="code" class="java"><pre name="code" class="java">	Object[indexA] = Object[indexB];
<pre name="code" class="java"><pre name="code" class="java"><pre name="code" class="java">	Object[indexB] = temp;
}










交换两个基本类型数组元素的值也是用同样的方法。


Java方法中引用类型的形参传递问题

原文:http://blog.csdn.net/lingzhm/article/details/44651115

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!