黑马程序员技术交流社区

标题: 字符串传值问题 [打印本页]

作者: 邓建军    时间: 2013-3-26 14:28
标题: 字符串传值问题
本帖最后由 邓建军 于 2013-3-27 11:39 编辑

class Program
    {
        static void Main(string[] args)
        {
            string s1 = "123";
            string s2 = s1;
            s2 = "234";
            Console.WriteLine(s1);
            Console.ReadKey();
        }
    }
引用类型传值传的是引用地址,s1应该为"234"才对,但输出结果是"123".

未命1名.jpg (24.14 KB, 下载次数: 209)

未命1名.jpg

作者: 狱之一族    时间: 2013-3-26 16:53
本帖最后由 狱之一族 于 2013-3-26 19:09 编辑

写错了,当占个沙发。。。。

作者: 胡志超    时间: 2013-3-26 18:19
狱之一族 发表于 2013-3-26 16:53
你理解错了,你开始定义了s1,然后你又一个string。等于重新定义了一个数,这就相当于你把s1的值赋给了s2, ...

额。。。这也改的太厉害了吧!别人是问引用传值的问题
作者: 黑马-杨鹏立    时间: 2013-3-26 18:26
你的想法是对的,因为string属于引用类型,所以你定义了一个string s1指向123,又定义了另一个变量string s2指向s1所指向的对象。所以s2第一步的值是123.
s2 = "234";
            Console.WriteLine(s1);
第二步的意思是你把s2指向123的连接断开,从新指向了另一个字符串234.所以你改变的是s2的指向与s1没有任何关系。
string类型会涉及到字符串拘留池,还有string类型是不可变的。分析这几点后你会很容易的使用string类型了。
作者: 狱之一族    时间: 2013-3-26 19:08
本帖最后由 狱之一族 于 2013-3-26 19:16 编辑
胡志超 发表于 2013-3-26 18:19
额。。。这也改的太厉害了吧!别人是问引用传值的问题

嗯,对不起啊!,理解错了。呵呵
作者: 胡志超    时间: 2013-3-26 20:00
狱之一族 发表于 2013-3-26 19:08
嗯,对不起啊!,理解错了。呵呵

呵呵。。。一起学习进步哈
作者: 狱之一族    时间: 2013-3-26 20:03
嗯嗯,我是个新手,我的目标是第八期,一点也不会,所以从现在就开始努力了,呵呵
作者: 张文    时间: 2013-3-26 21:46
给力。加油。
作者: 宋兴征    时间: 2013-3-26 21:48
      区别:变量名和变量名指向的值:
string s="abc";指的是变量名s指向内存空间的值为“abc”,而s="123"只是变量名s指向的内存空间改变了,而原先的“abc”本身没有变化。

字符串的不可变性:指的是内存空间的值不可变,而不是变量名不可变。
作者: DWC_5101    时间: 2013-3-26 23:08
string类型,在每次赋值操作,都会指向新的对象。
string s2 = s1 后,是把s1的值创建了一个新string对象,赋给s2,
因此,s2的引用地址不是0x1234。
可以把string看作像值类型的引用类型。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2