关于string类型的疑问...
string是引用类型,但为什么使用起来跟值类型相似呢?
如下面的代码显示:
static void Main()
{
string str = "abcd";
Console.WriteLine(str);
changeString(str);
Console.WriteLine(str);
}
private void changeString(string _str)
{
_str = "1234";
Console.WriteLine(_str);
}
输出结果:
abcd
1234
abcd
因为string是引用类型,在changeString里面已经改变了str的值为"1234",为什么第三次输出的值,仍是"abcd"呢?
问题点数:50、回复次数:12Top
1 楼jietuan(伪君子)回复于 2006-03-20 14:53:39 得分 10
string 是引用类型,但比较时是按值比较的;
比如 string a="1"; string b="1";
if(a==b)
{
//输出cc
}
else
{
//输出dd
}
答案是 ddTop
2 楼viena(维也纳N02)回复于 2006-03-20 14:58:10 得分 0
就是这么定的,不要问为什么~Top
3 楼lj915(. ) 烦!烦!烦!( .)回复于 2006-03-20 15:03:04 得分 0
呵呵...上面的例子应该是输出"cc"而不是"dd"
刚才搜索了一下,原来之前已经有人问过类似的问题了,
答案是string是"特殊的"引用类型,使用起来跟值类型差不多...
《.NET 框架程序设计修订版》会有详细的介绍...Top
4 楼lj915(. ) 烦!烦!烦!( .)回复于 2006-03-20 15:04:10 得分 0
就是这么定的,不要问为什么~
~~~~~~~~~~
这可不好吧,知其然而不知其所以然...Top
5 楼diandian82(点点(nothing))回复于 2006-03-20 15:07:20 得分 5
string传递的时候会new一个新的stringTop
6 楼viena(维也纳N02)回复于 2006-03-20 15:08:53 得分 5
就是为了更简单方便啊~Top
7 楼zahuifan(杂烩饭)回复于 2006-03-20 15:17:54 得分 5
string 是比较奇怪的一个类型。它除了可以被赋值为 null 外,其他的特征都和值类型一模一样,所以搂主就把它当作值类型用好了。Top
8 楼itmingong(nous+wisdom+courage)回复于 2006-03-20 15:36:11 得分 5
原来是这样啊。。。。Top
9 楼lovvver(ElephantTalk.Bright)回复于 2006-03-20 15:49:21 得分 10
你把这个方法改一下,应该就会改了:
private void changeString(ref string _str)
{
_str = "1234";
Console.WriteLine(_str);
}
然后调用处也改一下:
changeString(ref str);Top
10 楼livode(啊水)回复于 2006-03-20 15:55:53 得分 5
你在调用函数的时候传的是个值,而不是地址。改成ref就可以了。Top
11 楼dogfish(PowerJS.com)回复于 2006-03-20 16:07:04 得分 5
因为你传的是个值Top
12 楼jietuan(伪君子)回复于 2006-03-20 16:14:25 得分 0
哈哈 搞错
string 是引用类型,但比较时是按值比较的;
比如 string a="1"; string b="1";
if(a==b)
{
//输出cc
}
else
{
//输出dd
}
答案是 cc
Top




