C# 中 string不是引用类型吗 为什么传递参数后 它的值没改变

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespa... using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication14
{
class Program
{
public static void aa(string a ,string b)
{
string c;
c = a;
a = b;
b = c;
Console.WriteLine("a={0},b={1}", a, b);

}
static void Main(string[] args)
{
string x="aaa", y="bbb";
aa( x, y);
Console.WriteLine("x={0},y={1}", x, y);
Console.ReadKey();
}
}
}

既然string的类型是引用 那么输出的结果应该是 a=bbb b=aaa x=bbb y=aaa
可是运行的结果却是 a=bbb b=aaa x=aaa y=bbb
展开
 我来答
leon382
2010-07-27 · TA获得超过1064个赞
知道小有建树答主
回答量:1744
采纳率:0%
帮助的人:1011万
展开全部
在C#中,
有两种类型:引用类型(如:string)和非引用类型(如:int)。引用类型指向的其实是一个内存地址,String 虽然是引用类型 不过是不可变的
对字符串做一些操作 比如大小写的转换 += 实际上是重新创建了一个字符串
这也是为什么在做大量字符串拼接的时候要使用StringBuilder 而不用+=

如:

string a = “A”;

a += "B";

这时实际上是相当于重新创建了一个string 对象b,b的值是“AB”。
草薙在
推荐于2017-09-28 · TA获得超过4796个赞
知道大有可为答主
回答量:6187
采纳率:50%
帮助的人:6430万
展开全部
其实问题不在于string是值类型还是引用类型,是你不知道方法内部的参数的赋值与交换,是不影响外部参数的

里面的ab赋值和外面的xy赋值是没有任何关系的,所以你的道德x和y不应该输出成你想象的结果,即使是换成int这种值类型也一样

想要达到你的效果,可以把参数换成ref,比如aaa(ref string a ,ref string b)这样调用的话,a和b的修改会影响到外面的变量
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
pzzc189240d
推荐于2017-09-24 · TA获得超过201个赞
知道小有建树答主
回答量:310
采纳率:0%
帮助的人:190万
展开全部
string不是引用类型,只是一个数据类型,
String str=new String(); 这里这个str才是引用类型。因为这里str是类String的一个对象,对象是引用类型。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
CloudPRose
2010-07-27 · TA获得超过5175个赞
知道大有可为答主
回答量:3175
采纳率:66%
帮助的人:937万
展开全部
“基元数据都是值类型”
System.String不是你说的“基元类型”

“你肯定搞错了,如果s是大写的话,那么就是个类类型的,也就是引用类型的,小写的s只会是个值类型的 ”
很不幸,是你搞错了,C#中的string映射的正是System.String,两者没区别,都是类,都是引用类型。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
给世界一些震撼
2010-07-28 · TA获得超过1656个赞
知道小有建树答主
回答量:1011
采纳率:0%
帮助的人:722万
展开全部
想达到你要的目的你可以这样修改。

1、方法头 :public static void aa( ref string a, ref string b )
2、方法调用:aa( ref x, ref y );

这样修改后就是将 x,y 按引用传值。得到的结果就是你要的。

至于原理楼上的几位说的很清楚了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(8)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式