public sealed class String : IComparable, ICloneable,IConvertible, IEnumerable
表示文本,即一连串 Unicode 字符.
字符串是 Unicode 字符的连续集合,通常用于表示文本,而 String 是表示字符串的 System.Char 对象的连续集合。String 的值构成该连续集合的内容,并且该值是恒定的。
String.Clone()方法:这是一个浅拷贝。也就是向一个String对象添加了一个指针。并没有建立一个独立的String对象。不过由于String是只读的,所以这里也不会出现由于一个指针对所指对象进行修改,而影响其他指针所指内容的情况。以下是实现代码,可见只是返回了一个指针而已。
// Method required for the ICloneable interface.
// There's no point in cloning a string since they're immutable, so we simply
// return this.
/// <include file='doc/String.uex' path='docs/doc[@for="String.Clone"]/*' />
public Object Clone() {
return this;
}
String.Intern()方法,Intern 方法使用拘留池来搜索与 str 值相等的字符串。如果存在这样的字符串,则返回拘留池中它的引用。如果不存在,则向拘留池添加对 str 的引用,然后返回该引用。以下是MSDN上的示例代码。
String s2 = new StringBuilder().Append("My").Append("Test").ToString();
String s3 = String.Intern(s2);
Console.WriteLine((Object)s2==(Object)s1); // Different references.
Console.WriteLine((Object)s3==(Object)s1); // The same reference.
String.IsInterned()方法。也是到拘留池中找看是否有值相同的String。与Intern方法比较是如果有,那么就返回对这个值的引用。如果没有,那么这个函数不会在拘留池中添加String,而仅仅是返回一个空指针。
PadRight()/PadLeft() 可以指定字符串的总长度。如果设置的长度 > 字符串的长度,那么就用设置好的填充符(默认是空格)来进行填充。
String类重载了==,实际上就是调用调用自己重载的Equals函数。进行的是值的比较。以下是具体的实现代码。
/// <include file='doc/String.uex' path='docs/doc[@for="String.operatorEQ"]/*' />
public static bool operator == (String a, String b) {
return String.Equals(a, b);
}
// Determines whether two Strings match.
/// <include file='doc/String.uex' path='docs/doc[@for="String.Equals2"]/*' />
public static bool Equals(String a, String b) {
if ((Object)a==(Object)b) {
return true;
}
if ((Object)a==null || (Object)b==null) {
return false;
}
return a.Equals(b);
}