1、java中方法参数的传递只有值传递。
2、值传递的定义:将实际参数值得副本传入到到方法内,而参数本身不会受到任何影响。
3、首先演示基本数据类型的值传递代码如下:
package com.value;
/**
* 基本数据类型值传递代码效果演示
* @author tiger
*
*/
public class PrimitiveTransfer {
public static void swap(int a,int b){
int temp = a;
a = b;
b = temp;
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);
}
}
4、引用类型的值传递,代码如下:
package com.value;
/**
* 引用类型值传递代码效果演示
* @author tiger
*
*/
public class ReferenceTransfer {
public static void swap(Reference ref){
int temp = ref.a;
ref.a = ref.b;
ref.b = temp;
// ref = null; //不能在这里写这行代码,会报错 -- java.lang.NullPointerException
System.out.println("swap()方法里,ref.a = " + ref.a+",ref.b = " + ref.b);
ref = null;//将其指空,而main方法中依然可以正常输出,说明是值传递。
}
public static void main(String[] args) {
Reference ref = new Reference();
ref.a = 6;
ref.b = 9;
swap(ref);
System.out.println("交换结束后,ref.a = " + ref.a+",ref.b = " + ref.b);
}
}
/**
* 自定义引用类型
* @author tiger
*
*/
class Reference{
int a;
int b;
}
5、上面的引用类型的值传递我们可以看到,将对象的引用作为参数传递,main方法中的ref和swap方法中的ref都是指向Reference对象的地址值,交换后输出结果一样,这里会给人一种错觉。但思考上边引用类型代码的第15行,在swap方法执行后,ref已经被垃圾回收器回收,而main方法中依然可以正常输出,因此可以很好说明了引用类型也属于值传递。