一直没有搞懂这个,说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
打个比方,你给别人写信的时候,填的别人的地址的时候就相当于引用传递。如果你直接把他的房子搬到这个信封上,这就相当于值传递。(有点夸张)