首页 > 代码库 > [C#] string 与 String,大 S 与小 S 之间有关字符串的秘密(整理中...)

[C#] string 与 String,大 S 与小 S 之间有关字符串的秘密(整理中...)

string 与 String,大 S 与小 S 之间有关字符串的秘密

  字符串是 String 类型的对象,它的值是文本。 在内部,文本被存储为 Char 对象的顺序只读集合。 C# 字符串末尾没有以 null 结尾的字符;因此 C# 字符串可以包含任意数目的嵌入式 null 字符(“\0”)。 字符串的 Length 属性代表它包含的 Char 对象的数量,而不是 Unicode 字符的数量。 若要访问字符串中的各个 Unicode 码位,请使用 StringInfo 对象。

 

小写 string 与大写 String

  在 C# 中,关键字 string 是 String 的别名。 因此,String 与 string 等效,也就是说您想用哪个就用哪个。String 类提供了很多用于安全地创建、操作和比较字符串的方法。此外,C# 语言还重载某些运算符来简化常见的字符串操作。

 

声明与初始化 string

  请看示例:

 1         static void Main(string[] args) 2         { 3             // 声明但不初始化  4             string msg1; 5  6             // 声明并初始化为 null  7             string msg2 = null; 8  9             // 作为一个空字符串进行初始化,用 Empty(空) 常量而不是字面值的 ""(空)10             string msg3 = String.Empty;11 12             // 用正则的字符串字面值进行初始化 13             string oldPath = "c:\\windows";14 15             // 直接以字符串初始化 16             string newPath = @"c:\windows";17 18             // 也可以使用 System.String19             String content = "Hello World!";20 21             // 使用 const 防止 msg4 被篡改22             const string msg4 = "I‘m const!";23 24             // 可以使用隐式类型 var25             var msg5 = "Hi!";26 27             // 使用 String 构造器进行初始化28             char[] letters = { A, B, C };29             string alphabet = new String(letters);30 31             Console.Read();32         }

  【注意】除了在使用字符数组初始化字符串时以外,不要使用 new 运算符创建字符串对象。

  使用 Empty 常量值初始化字符串可新建字符串长度为零的 String 对象。零长度字符串的字符串表示形式为 ""。使用 Empty 值(而不是 null)初始化字符串可以降低发生 NullReferenceException 的可能性。我们常常会在尝试访问字符串之前使用静态 IsNullOrEmpty(String) 方法验证字符串的值。

 

string 的不可变性

  字符串对象是不可变的:即它们创建之后就无法更改。 所有看似修改字符串的 String 方法和 C# 中的运算符,实际上都以新字符串对象的形式返回结果。 在下面的示例中,当连接 s1 和 s2 的内容以形成一个字符串时,不会修改两个原始字符串。 += 运算符会创建一个包含组合内容的新字符串。 这个新对象赋给变量 s1,而最初赋给 s1 的对象由于没有其他任何变量包含对它的引用而释放,将在后续被垃圾回收。

  示例一:

 1         static void Main(string[] args) 2         { 3             var s1 = "Hi!"; 4             var s2 = "Fanguzai!"; 5  6             //拼接 s1 和 s2,并且修改 s1 指向的值 7             s1 += s2;   //即 s1 = s1 + s2; 8  9             Console.WriteLine(s1);10             Console.Read();11         }

技术分享

 

   由于“修改”字符串实际上是创建一个新字符串,因此创建对字符串的引用时必须谨慎。 如果创建了对字符串的引用,然后“修改”原始字符串,则该引用指向的仍是原始对象,而不是修改字符串时创建的新对象。

 1         static void Main(string[] args) 2         { 3             var s1 = "Hi! "; 4             var s2 = s1; 5             6             //在 s1 重新赋值后,这次没有重新修改 s2 指向的值 7             s1 += "Fanguzai!";   //即 s1 = s1 + "Fanguzai!"; 8  9             Console.WriteLine(s2);10             Console.Read();11         }

技术分享

 

正则 string 与原义 string

 

string 的转义序列

 

格式化字符串

 

操作子字符串

 

字符串的 null 与 ""(空)

 

可提高性能的 StringBuilder 

  .NET 中的字符串操作已高度优化,大多数情况下不会显著影响性能。但在某些应用场景中,例如在执行数百甚至好几千次的循环中,字符串操作很可能会影响性能。 StringBuilder 类创建了一个字符串缓冲区,用于在程序执行大量字符串操作时提供更好的性能。 StringBuilder 字符串还使您能够重新分配个别字符(内置字符串数据类型所不支持的字符)。例如,此代码在不创建新字符串的情况下更改了一个字符串的内容:

1         static void Main(string[] args)2         {3             var sb = new StringBuilder("~ Hi! Fanguzai!");4             sb[0] = ^;5 6             Console.WriteLine(sb);7             Console.Read();8         }

技术分享

 


【博主】反骨仔

【出处】http://www.cnblogs.com/liqingwen/p/6155790.html 

【参考】微软官方文档

[C#] string 与 String,大 S 与小 S 之间有关字符串的秘密(整理中...)