1.String和StringBuilder区别
这是java面试题吗?第一次遇到这种面试题,查阅了一下MSDN,如下。
String字符串是不可变,执行的字符串操作例程重复添加或删除操作到看起来是单个字符串可以精确显著的性能损失。 例如,下面的代码使用的随机数生成器使用 1000年个字符,范围从 0x0001 到 0x052F 中创建一个字符串。 尽管代码会使用字符串串联以将新字符追加到名为的现有字符串str,它实际创建一个新String为每个串联操作的对象。
using System; using System.IO; using System.Text; public class Example { public static void Main() { Random rnd = new Random(); string str = String.Empty; StreamWriter sw = new StreamWriter(@".StringFile.txt", false, Encoding.Unicode); for (int ctr = 0; ctr <= 1000; ctr++) { str += Convert.ToChar(rnd.Next(1, 0x0530)); if (str.Length % 60 == 0) str += Environment.NewLine; } sw.Write(str); sw.Close(); } }
你可以使用StringBuilder类而不是String类用于对字符串的值进行多个更改的操作。 与实例的不同String类,StringBuilder是可变的对象; 当你连接、 追加或删除从字符串的子字符串,在单个字符串上执行的操作。 完成后修改的值StringBuilder对象,可以调用其StringBuilder.ToString方法将其转换为字符串。 下面的示例替换String在前面的示例可用于连接到从 0x0001 到与 0x052F 的范围内的 1000 个随机字符StringBuilder对象。
using System; using System.IO; using System.Text; public class Example { public static void Main() { Random rnd = new Random(); StringBuilder sb = new StringBuilder(); StreamWriter sw = new StreamWriter(@".StringFile.txt", false, Encoding.Unicode); for (int ctr = 0; ctr <= 1000; ctr++) { sb.Append(Convert.ToChar(rnd.Next(1, 0x0530))); if (sb.Length % 60 == 0) sb.AppendLine(); } sw.Write(sb.ToString()); sw.Close(); } }