值传递与引用传递
值传递(指针传递)
public class passbyvalue {
private void one(int x){
x += 1;
System.out.println("one中x="+x);
}
public static void main(String[]args){
passbyvalue test=new passbyvalue();
int x=1;
test.one(x);
System.out.println("main中x="+x);
}
}
分析:形参是实参的拷贝,改变形参的值并不会影响外部实参的值。
由于x+=1;是在test方法栈里面运行的,所以只会改变test方法栈里面的x值,而不会改变main方法栈里面的x值(形参的改变不会影响实参)。
引用传递
引用传递,传递的是实际参数的地址.
传递的是值的引用,也就是说传递前和传递后都指向同一个引用(同一个内存空间)。
public class passbyreference {
private void test(A a){
//a=new A();
a.x = 1;
System.out.println("开始x="+a.x);
}
public static void main(String[] args) {
passbyreference t = new passbyreference();
A a = new A(); //x=0
a.x = 2; //x=2
t.test(a); //引用传递,将main中的a传到test中a,x=1
System.out.println("后面x="+a.x);
}
}
class A{
int x = 0;
}
你有一只笔,当朋友跟你借的时候你把笔直接给他,他把笔弄坏了那么你的笔也坏了,这是引用传递
你有一只笔,当朋友跟你借的时候你复制一只完全一样的笔给他,他把笔弄坏了而你的笔仍然还是好的,不会变化这是值传递