java中的传值与传引用
时间:2010-10-06 来源:lxy_em30
java中的传值和传引用的说法其实只是仿照了C/C++的说法,事实上,java中传的都是值,如下例:
public class Test {
public static void main(String[] args) {
Test t = new Test();
A a1 = new A(3);
change(a1);
System.out.println(a1.getId());
int a= 45;
change(a);
System.out.println(a);
}
static class A {
int id;
public A(int id) {
this.id = id;
}
public void setId(int id) {
this.id = id;
}
public int getId() {
return this.id;
}
}
public static void change(A a){
a = new A(5);
System.out.println("a: " + a);
}
public static void change(int a){
a = 5;
}
}
此程序的输出结果是:3和45;
很显然,第一次调用的change(a1)时,传入的并非是a1本身,而只是a1所指向的地址的值,而在函数里面的a = new A(5);并没有改变a1本身所指向的地址值,所以,最后还是输出了3;第二次调用chenge(a)时,就更容易理解了,此时传入的就是5这个值,并不是a本身,从而a的值最终都没有变化,当然输出45。
由上可以很简单的认为,java中没有所谓的传引用一说,说到底都是传值,区别在于:
1、当传入的是对象时,所谓的“值”变成了该对象在堆上的“地址值”,如传入对象a1,则此值是:a1的地址值;
2、当传入的是原生变量如:int,long等变量时,则所谓的“值”是该变量的“内容”,如:a=5,就是传入的5。