C#内置类型中,字符串是唯一的引用类型,具有不可变性和密封性。
不可变性指字符串一旦创建成功,将不可更改,str1=str1,实际上在堆新创建了一个str1字符串对象,并且返回对该对象的引用。
密封性指字符串不能被继承。
不可变性和密封性能保证字符串类型更加高效和安全。
字符串操作
1、格式化字符串
String.Format
string str1 = "puguo 2530"; string strFormat = "{0,20}";//字符串格式化占20字符 string strResult=string.Format(strFormat,str1); Console.WriteLine("string.Format({0},{1})=[{2}]\n",strFormat,str1,strResult);
标准数字格式化字符串 | 含义 | 实例 |
C或c | 货币 | string.Format("{0:C}",10)=¥10.00 |
D或d | 补位 | string.Format("{0:D3},10")=010 |
E或e | 指数 | string.Format("{0:E3},10")=1.000e+001 |
F或f | 固定点 | string.Format("{0:F3},10")=10.000 |
G或g | 常规 | string.Format("{0:G3},10")=10 |
N或n | 千分符 | string.Format("{0:N},10000")=10,000.00 |
P或p | 百分号 | string.Format("{0:P},1")=100% |
X或x | 十六制 | string.Format("{0:X}",1900)=96C |
自定义数字格式化字符串 | 含义 |
0 | 0占位符 |
# | 数字占位符 |
. | 小数点 |
, | 千位分隔符 |
; | 段分割符 |
% | 百分符 |
2、比较字符串
(1)、string.Compare(str1,str2)
str1<str2 --->-1
str1==str2 --->0
str1>str2 --->1
(2)、string.CompareOrdinal(str1,str2); 与(1)区别,与本地化无关
str1<str2 --->-1
str1==str2 --->0
str1>str2 --->1
(3)、str1.CompareTo(str2);
str1<str2 --->-1
str1==str2 --->0
str1>str2 --->1
str2 is null --->1 ""比null大
(4)、string.Equals(str1, str2) <==> str1==str2
str1==str2 --->0
str1!=str2 --->!0
(5)、 str1.Equals(str2)
str1==str2 --->0
str1!=str2 --->!0
(6)、str1==str2
总结:静态方法比实例方法效率高,因为静态方法比实例方法先加载。总的来说,(1)(2)比(3)好,(4)比(5)好
3、字符串连接
(1)、str1+str2
(2)、string.Concat(str1,str2)
4、复制字符串
(1)、str2=string.Copy(str1);
copy创建一个新的实例字符串对象,str2,str1不是指向同一字符串引用。
(2)、str2=str1
直接复制,str2与str1指向同一字符串引用。字符串的不可变性导致字符串引用的指不可变,改变字符串的指知识改变字符串指向的字符串引用。
(3)、str2=(string)str1.clone()
str1.clone()返回的是object类型,强制转化为string,与(2)效果一致。