Java方法中引用类型的形参传递问题
2015-03-26 15:59
363 查看
众所周知,Java方法的形参如果是基本类型,是值传递,也就是说实参将数值传递给形参后,形参对值的操作跟实参变量毫无关系,举例:
change(c , d);
这时输出c, 其值还是1。
假如是引用类型作为形参:
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(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 中值传递与引用传递以及方法中别名的问题
- Java参数传递过程中 传形参和传引用问题讨论
- Java方法中传值和引用传递的问题(转)
- java 引用类型作为方法参数使用问题
- Java中方法内的参数和变量内存地存放问题,及形参实参内存存放,数值类型转化问题
- 【Java】方法形参是一个类类型(引用类型)
- 由【JAVA中参数传递问题】引发除了基本数据类型和引用类型的思考
- 关于java基础类型与引用类型内存存储问题,以及string.intern()方法(String两种创建方式的区别)
- java中的形参为引用类型的问题
- java方法传递引用、传递基本类型
- java 引用传递小问题
- 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)
- Java传参的值传递和引用传递问题(转)
- java中的值传递和引用传递及对应的数据类型
- 探讨Java中函数是值传递还是引用传递问题
- Java值传递和地址传递:关于String类型和集合类型作为函数参数时传值问题的测试
- Java传递基本类型:值传递,对象作为参数:引用传递
- (转载)Java String类型的参数传递问题
- 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)
- JAVA方法中数组作为形参,传的是引用