黑马程序员技术交流社区
标题:
关于string类型交换两个变量值得问题
[打印本页]
作者:
高腾
时间:
2013-6-14 07:39
标题:
关于string类型交换两个变量值得问题
本帖最后由 高腾 于 2013-6-15 14:14 编辑
string类型本来就是引用类型,但是使用下面的ExcVal方法却不能交换两个变量的值
01.class Program
02. {
03. static void Main(string[] args)
04. {
05. string s1 = "123";
06. string s2 = "244";
07. ExcVal(s1,s2);
08. Console.WriteLine("{0},{1}", s1, s2);
09. Console.ReadKey();
10.
11. }
12.
13. static void ExcVal(string s1,string s2)
14. {
15. string temp = s1;
16. s1 = s2;
17. s2 = temp;
18. }
19. }
复制代码
但是如果在参数前面加上ref,就可以交换两个变量的值
重点是:ref的作用就是传递引用,string类型本来就是引用类型,为什么不能交换值?(
之前发错地儿了)
作者:
许庭洲
时间:
2013-6-14 08:58
String类是一种传统的修改字符串的方式,它确实可以完成把一个字符串添加到另一个字符串上的工作没错,但是在.NET框架下,这个操作没意义.因为系统先是把两个字符串写入内存,接着删除原来的String对象,然后创建一个String对象,并读取内存中的数据赋给该对象
作者:
彭康
时间:
2013-6-14 09:47
01.class Program
02. {
03. static void Main(string[] args)
04. {
05. string s1 = "123";开辟内存S1(名字为了让你看起来更清楚)放入"123";
06. string s2 = "244";开辟内存S2(名字为了让你看起来更清楚)放入"244";
07. ExcVal(s1,s2);//传入方法
08. Console.WriteLine("{0},{1}", s1, s2);
09. Console.ReadKey();
10.
11. }
12.
13. static void ExcVal(string s1,string s2)
14. {
15. string temp = s1;//temp 指针指向S1内存地址
16. s1 = s2;//S1指针指向S2内存地址
17. s2 = temp;//S1 指针指向temp内存地址(原S1)
18. }//加上ref 使得方法2个方法内的变量指针始终相同
19. }
作者:
陈壹
时间:
2013-6-14 13:18
无关于不能交换值的问题,在你式子中Main方法中的s1,s2跟ExcVal中的s1,s2都属于局部变量,彼此之间相对独立,虽然ExcVal中的参数来源于Main但是,ExcVal却无法对Main方法中的程序进行改变,因为它没有返回值。参数前加ref的意义是返回参数,把两个同名局部变量相关联,使它们的指针指向同一个内存空间地址。
作者:
popoluno
时间:
2013-6-14 14:15
参数前加ref的意义是返回参数,和你说的问题是两码事
作者:
yangaidongcumt
时间:
2013-6-15 19:14
因为字符串的不变性~~~~~
作者:
高腾
时间:
2013-6-15 19:26
yangaidongcumt 发表于 2013-6-15 19:14
因为字符串的不变性~~~~~
这里的交换只是交换内存指针吧
如果按你说的那样,使用ref也不会交换值
作者:
关关雎鸠
时间:
2013-6-15 20:39
ref的存在就是表示引用传递,没有就表示值传递。那么在没有ref的时候,不管是引用类型还是值类型,都是只传递值过去。
而方法里面的其实是再次定义了一个新的变量,跟之前的没有任何关系。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2