C#当中的引用类型和值类型的困域 http://www.21cnvip.net/TopicView/list5748512.html 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 修改其中一个字符串,这会创建一个全新的string对象,而另一个字符串没有改变现在对这个问题我自己似乎也有所理解。但是有一点不解,为什么字符串是要这样子做呢?即不可修改,而且每次多创建一个新的字符串拷贝。他的不可修改难道是因为是属于引用类型吗?其它用类创建的引用类型也能修改其值?难道是? 之前学习PHP的时候,如果要引用字符串可以这样$a = "test";$b = &$a;但是,C#当中,字符串是引用类型的,但表现出来的确更像是值类型的。那如果让字符串表现出像引用类型呢? 不管string是引用类型还是值类型,lz给的例子结果都应该是test。C#当中,字符串是引用类型的,但表现出来的确更像是值类型的确实是这样,就这样理解也没错。 这确与我们期待的引用类型正好相反。当用值"test";初始化a时,就在堆上分配了一个string对象。在用a初始化b时,引用也指向这个对象,所以b的值也是"test"。但是当用" "要改变b的值时,他不是替换原来堆地址的值,而是在堆上就会为新值分配一个新对象。而a变量仍指向原来的对象,所以它的值没有改变。基本上,string类实现为其语义遵循一般的、直观的字符串规则。 string a = "test"; //这里声明变量并给变量赋值。在内存中分配一个空间来存储变量string b = a; //这里也是给变量分配空间并把变量a复制给bb = " "; //在内存中另外分配空间来存放变量b 也就是说string在赋值的时候,并不是在原来的地址上更改,而是重新分配一块内存,这时str1已和str2所对应的内存已经不同了 string a="test",a指向的是test在内存中的地址;string b=a,把a的值赋给b,实际上b和a指向test;b=" ",b指向了空的地址,b的值改变了而a的值没有改变,a仍然指向test地址。 httpwebrequest怎么模拟post请求 请教一个疑难问题 SMTPClient多线程下发送邮件 会不会因为smtp资源而阻塞啊???? 关于强名称和混淆器问题 请教一个dataset的GetXml方法的问题 FTP 如何得到服务器当前目录? 抓包软件的问题 菜鸟提问 大家帮忙 奇怪,难道是ODBC的Bug?请大家看看,参与都有分。 新手求指点(通往C#编程大神之路) 简体<--->繁体,如何实现? 对Linq to SQL 性能问题 C# OLEDB连接数据 ,数据数值字段不显示内容
$b = &$a;但是,C#当中,字符串是引用类型的,但表现出来的确更像是值类型的。那如果让字符串表现出像引用类型呢?
确实是这样,就这样理解也没错。
在用a初始化b时,引用也指向这个对象,所以b的值也是"test"。
但是当用" "要改变b的值时,他不是替换原来堆地址的值,而是在堆上就会为新值分配一个新对象。
而a变量仍指向原来的对象,所以它的值没有改变。基本上,string类实现为其语义遵循一般的、直观的字符串规则。
string b = a; //这里也是给变量分配空间并把变量a复制给b
b = " "; //在内存中另外分配空间来存放变量b
string b=a,把a的值赋给b,实际上b和a指向test;
b=" ",b指向了空的地址,b的值改变了而a的值没有改变,a仍然指向test地址。