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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邓建军 中级黑马   /  2013-3-26 14:28  /  2491 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 邓建军 于 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, 下载次数: 203)

未命1名.jpg

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

9 个回复

正序浏览
string类型,在每次赋值操作,都会指向新的对象。
string s2 = s1 后,是把s1的值创建了一个新string对象,赋给s2,
因此,s2的引用地址不是0x1234。
可以把string看作像值类型的引用类型。
回复 使用道具 举报
      区别:变量名和变量名指向的值:
string s="abc";指的是变量名s指向内存空间的值为“abc”,而s="123"只是变量名s指向的内存空间改变了,而原先的“abc”本身没有变化。

字符串的不可变性:指的是内存空间的值不可变,而不是变量名不可变。
回复 使用道具 举报
张文 中级黑马 2013-3-26 21:46:15
8#
给力。加油。
回复 使用道具 举报
嗯嗯,我是个新手,我的目标是第八期,一点也不会,所以从现在就开始努力了,呵呵
回复 使用道具 举报
狱之一族 发表于 2013-3-26 19:08
嗯,对不起啊!,理解错了。呵呵

呵呵。。。一起学习进步哈
回复 使用道具 举报
本帖最后由 狱之一族 于 2013-3-26 19:16 编辑
胡志超 发表于 2013-3-26 18:19
额。。。这也改的太厉害了吧!别人是问引用传值的问题

嗯,对不起啊!,理解错了。呵呵
回复 使用道具 举报
你的想法是对的,因为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:04

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
狱之一族 发表于 2013-3-26 16:53
你理解错了,你开始定义了s1,然后你又一个string。等于重新定义了一个数,这就相当于你把s1的值赋给了s2, ...

额。。。这也改的太厉害了吧!别人是问引用传值的问题
回复 使用道具 举报
本帖最后由 狱之一族 于 2013-3-26 19:09 编辑

写错了,当占个沙发。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马