A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 魏庆君 中级黑马   /  2012-8-11 10:04  /  2180 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请教:什么时候用到的是值传递,什么时候用到的是引用传递,一直都没有弄清楚

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

1 个回复

倒序浏览
当实参当作值来传递时,就产生了一个新的拷贝。
[c-sharp] view plaincopyprint?
class Test  
   {  
       static void Main(string[] args)  
       {  
           int x=8;  
           Fo(x);  
           Console.WriteLine("x={0}", x);  
       }  
      
       static void Fo(int p)  
       {  
           p = p + 1;  
           Console.WriteLine("p={0}", p);  
       }  
   }  

程序运行结果为:p=9,x=8;即X的值不会受P影响,给P赋一个新值并不会改变X的内容,因为P和X存在于内存中不同的位置。

同理,用传值的方式传递一个引用类型对象时,只是复制这个对象本身,即复制其地址值,而不是它指代的对象。下面代码中Fo中看到的StringBuilder对象,就是在Main方法中实例化的那一个,只是有不同的引用指向它而已。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马