Java的参数传递机制是在Java中一个比较烦的问题,一般人都不太会注意,但要详细的解释一下其机制的话还是有很多人说不上来。其实我也是,所以就查了点相关资料并且记录下来,好好理解Java的参数传递。
对于参数传递主要可分为几类:1、Java的基本类型作为参数传递时,主要是传递值的拷贝。所以不能改变原值。2、Java的对象作为参数传递时,是引用传递,把对象在内存中的地址拷贝传递给参数。
下面举个例子来简单说明(例子是网上找的,呵呵!)
public class PersonT {
public void change(Person p) {
p.name = "mary";
p.age = 20;
}
public void changeInt(int i) {
i = 8;
}
public void change1(Person p){
p = new Person("tom",22);
}
public static void main(String[] args) {
PersonT t = new PersonT();
Person p = new Person("john", 18);
Person p1 = p;
System.out.println(p);
t.change(p1);
System.out.println(p1);
System.out.println("传回来的值指向是否一致:" + p.equals(p1));
int i = 10;
System.out.println("i值为:" + i);
t.changeInt(i);
System.out.println("i值为:" + i);
t.change1(p);
System.out.println(p);
}
}
输出结果为:
姓名:john 年龄:18
姓名:mary 年龄:20
传回来的值指向是否一致:true
i值为:10
i值为:10
姓名:mary 年龄:20
由上面的例子可知:对于Java来说值传递所传递的是原值的备份,所以对其修改以后原值还是没有变化,而引用传递,则是传递对象的地址,所以即使是对象内容改变其值也不会变化,因为引用地址没变化。
总结:
1. 值传递 所传递的是原值的拷贝,即使拷贝在传递后发生了变化,原值也不会改变。
2. 引用传递 所传递的是引用对象的地址,所以在传递后对于对象内容的改变并不能使得传递参数发生变化,只有在指向不同对象是才会发生变化。