码迷,mamicode.com
首页 > 其他好文 > 详细

值传递和引用传递

时间:2014-05-04 18:40:12      阅读:286      评论:0      收藏:0      [点我收藏+]

标签:java   值传递 引用传递   

所谓的值传递,就是将要传递的值作为一个副本传递,例如:

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!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

值传递和引用传递,布布扣,bubuko.com

值传递和引用传递

标签:java   值传递 引用传递   

原文地址:http://blog.csdn.net/qiangzijun/article/details/24974195

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!