Welcome

首页 / 软件开发 / .NET编程技术 / .Net Discovery系列之二 string从入门到精通(下)

.Net Discovery系列之二 string从入门到精通(下)2011-01-19 博客园 缘清前两节我们介绍了string的两个基本特性,如果你觉得你已经比较全面的了解了string,那么就来看看这第3、4两节吧。

三.有趣的比较操作

在第一节与第二节中,我们分别介绍了字符串的恒定性与与驻留性,如果这位同学友觉得完全掌握了以上内容,那么就在第三节中检验一下自己的学习成果吧!

以下10段简单的代码将通过值比较与地址引用比较,来说明前两节讲到的内容,大家也可以通过这些代码来检测一下自己对string的了解程度。

代码一:

string a = "str_1";
string b = "str_1";
Response.Write(a.Equals(b));
Response.Write(ReferenceEquals(a,b));

输出:True (Equals比较字符串对象的值)

True (ReferenceEquals比较字符串对象的引用,由于字符串驻留机制,a与b的引用相同)

代码二:

string a = "str_1str_2";
string b = "str_1";
string c = "str_2";
string d = b + c;
Response.Write(a.Equals(d));
Response.Write(ReferenceEquals(a, d));

输出:True(Equals比较字符串对象的值)

False(ReferenceEquals比较字符串对象的引用,由于变量d的值为变量连接的结果,字符串驻留机制无效)

代码三:

string a = "str_1str_2";
string b = "str_1" + "str_2";
Response.Write(a.Equals(b));
Response.Write(ReferenceEquals(a, b));

输出:True(Equals比较字符串对象的值)

True (ReferenceEquals比较字符串对象的引用,由于变量b的值为常量连接的结果,字符串驻留机制有效。如果变量b的值由“常量+变量”的方式得出,则字符串驻留无效)

代码四:

string a = "str_1";
string b = String.Copy(a);
Response.Write(a.Equals(b));
Response.Write(ReferenceEquals(a, b));

输出:True(Equals比较字符串对象的值)

False (ReferenceEquals比较字符串对象的引用,Copy操作产生了新的string对象)