java引用传递和值传递区别?有代码解释更好!

一直没有搞懂这个,说new 对象的是引用传递,基本数据类型是值传递,引入传递如何?值传递又如何呢?

就是其实java中函数都是传值,只不过对于对象,传的是引用的值,因而函数内部可以修改这个引用所指向的对象的数据。而基本数据类型也是传值,函数内部的修改是改的复制的值,因而函数出来以后不会影响原来的基本数据

类比到C语言 引用指的是指针,也就是传递的是地址。

值传递,传的是具体的数值。

调用函数时,传对象过去就是引用,传具体值就是值传递

你可以看一下,堆,栈,方法区这三个里面分别存放的是什么,你的问题就容易理解了


public class A {
    private int a ;

    private A(int a){
        this.a = a;
    }

    static void valueTransmitA(A value){
        value.a = 2; //修改value所引用的对象的属性;
    }

    static void valueTransmitB(A value){
        value = new A(2); //使用"="修改value的引用;
    }

    public static void main(String[] args){
        A a = new A(1);
        valueTransmitA(a);
        System.out.println(a.a);//这里打印的数值是2,表示参数a所引用的对象的值在方法内被改变了;

        a = new A(1);
        valueTransmitB(a);
        System.out.println(a.a);//这里打印的数值是1,表示参数a所引用的对象没有在方法内改变;

    }
}

http://blog.csdn.net/yangjingyuan/article/details/5862944

打个比方,你给别人写信的时候,填的别人的地址的时候就相当于引用传递。如果你直接把他的房子搬到这个信封上,这就相当于值传递。(有点夸张)