所谓的值传递,就是将要传递的值作为一个副本传递,例如:
int i = 10,j
j=i;//值传递,将i的值复制一份传递给j
引用传递,传递的是引用对象的内存地址。例如:
Object x ="Java";//X保存的是内存中"Java"字符串的地址,是对"Java"的一个引用
Object y;
y=x;//引用传递,将X引用地址传递给y,所以y也指向"Java"
再来看下面代码
void method1(int i ){i=100}
void method2(Object x){x="C#"}
------------------------------------------------
method1(i);
System.out.println(i);
method2(x);
System.out.println(x);
System.out.println(y);
------------------------------------------------
代码分析:
在method1()方法中,我们将变量i的值传递给参数i。尽管在method1()方法内部将参数i的值复制为100,但对变量i没有任何影响,所以第一条输出语句结果为10.
那么第2次println()会不会出入C#呢?按理说,我们将x引用地址传递给method2()方法的x,也就是说x与对象x指向同一个内存地址;然后将参数x的值修改为C#,不也就修改了x对象的内容吗?但是,println()输出结果任然是Java!这是因为,我们实际上是将x对象引用地址这一"值"传递给x参数,然后执行:x=“C#”;
因此执行的结果是x被重新指向存放"C#"的内存地址,这时参数x与原来的对象x彻底脱离了关系!所以println()语句结果自认是Java!
原文地址:http://blog.csdn.net/qiangzijun/article/details/24974195