摘要:基本说明
string是不可变得对象。
所以字符串连接操作并不更改当前字符串,只是创建并返回新的字符串,速度慢。
所以string有独特的Intern/IsInterned方法
对字符串运算前要检查字符串是否为null
null意味着字符串没有赋值,没有分配内存。
检查一个字符串是否为空字符串
使用Length来检查一个字符串是否为空。
计算Length时,只需要检查内部数组的长度,不需要字节比较。
字符串连接
频繁进行字符串连接操作时,使用StringBuilder类来改善性能,连接操作越频繁,差别越明显。
StringBuilder 具有多个构造函数,可以从字符串初始化对象并设置其容量和最大容量。(默认的最大容量约为 20 亿个字符)对象的容量可以根据需要调高,只要不超过最大容量即可。构造 StringBuilder 之后,就不能再调整其最大容量。
频繁进行字符串连接操作用时用StringBuilder速度快是指如下形式。
private void TestA()
{
string test = "";
for(int i=0; i < 100000; i++){test = test + "Test";}
}
private void TestB()
{
StringBuilder sb = new StringBuilder();
for(int i=0; i < 100000; i++){sb.Append("Test");}
}
TestB >> TestA
不是指如下形式
private void TestC()
{
for(int i=0; i < 100000; i++){
StringBuilder sb = new StringBuilder();
sb.Append("A");
sb.Append("B") ;
sb.Append("C") ;
}
}
private static void TestD()
{
for(int i=0; i < 100000; i++)
{
string test;
test = "A" + "B" + "C";
}
}
TestD > TestC
比较字符串
String.Equals方法来比较两个字符串
空字符串
用String.Empty表示空字符串,不要用””。String.Empty的定义为public static readonly string Empty,编译时会转化成””,但是String.Empty是一个常数,””是一个字符串对象,对字符串对象进行运算总是很慢的。
Unicode表示字符串
\U + 字符串的unicode编码,比如\U0066b
Clone字符串
因为字符串是不可改变的,所以具有相同值的两个单独字符串并没有多大意义。所以,虽然 String 实现了 IClonable,但 String.Clone 只返回对相同字符串的引用,而不进行克隆。
使用静态方法 Copy可以创建字符串的副本
字符串转换
string实现了IConvertible,但是没有办法从外部访问IConvertible定义的Toxxx函数,(声明为private)但是需要用Convert 类中的 To... 方法将字符串转换为其他内置值类型
字符串比较
值比较
string是对象,但是string重载了==运算符,所以==运算符实际调用 String.Equals
如果您希望使用......[
阅读全文]