值传递与引用传递

值传递(指针传递)

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;
}
值传递与引用传递

你有一只笔,当朋友跟你借的时候你把笔直接给他,他把笔弄坏了那么你的笔也坏了,这是引用传递
你有一只笔,当朋友跟你借的时候你复制一只完全一样的笔给他,他把笔弄坏了而你的笔仍然还是好的,不会变化这是值传递