分享

String与string,bool与Boolean

 紫衣风华 2014-11-20
String是一个类,string是一种数据类型.string是c#中的类,String是.net Framework的类(在c# IDE中不会显示蓝色) c# string映射为.net Framework的String如果用string,编译器会把它编译成String,所以如果直接用String就可以让编译器少做一点点工作 如果使用c#,建议使用string,比较符合规范 string始终代表 System.String(1.x) 或 ::System.String(2.0) ,String只有在前面有using System;的时候并且当前命名空间中没有名为String的类型(class、struct、delegate、enum)的时候才代表System.Stringstring是关键字,String不是,也就是说string不能作为类、结构、枚举、字段、变量、方法、属性的名称,而String可以-----------------------------------
string对象是不可变的。包括长度或者其中的任何字符都是不可以改变的。string @string = "a";@string = @string + "b"; 以上代码让人误以为@string是能够增加长度的。其实第二句代码是重新创建了一个新的对象,而第一个对象被丢弃,它将成为垃圾收集器收集的对象。C#中不能使用new string()来构造一个string对象。假如可以,以上代码相当于:string @string = new string("a");@string = new string("a"+"b");StringBuilder是可变的。它是专门用于对字符串和字符执行动态操作的类。用StringBuilder实现:StringBuilder stringBuilder = new StringBuilder("a");stringBuilder.Append("b");StringBuilder在内部有一个足够长的字符数组用于存放字符串对象,当字符串长度没超过字符数组长度时,所有操作都是针对同一个字符数组。当长度超过时,StringBuilder将自动创建一个更长的数组,把原来的数据复制到新数组中。------------------------------------
2.字符串操作性能比较。让string和StringBuilder执行相同的操作:循环追加一个字符串"a"。 public static void CompareString() { UseString(); UseStringBuilder(); }
private static void UseString() { string @string = "";
DateTime startTime = DateTime.Now; for (int i = 0; i < 10000; i++) { @string += "a"; } DateTime endTime = DateTime.Now; TimeSpan timeSpan = endTime - startTime; Console.WriteLine(timeSpan.ToString()); } private static void UseStringBuilder() { StringBuilder stringBuilder = new StringBuilder();
DateTime startTime = DateTime.Now; for (int i = 0; i < 1000000; i++) { stringBuilder.Append("a"); } DateTime endTime = DateTime.Now; TimeSpan timeSpan = endTime - startTime; Console.WriteLine(timeSpan.ToString()); }运行CompareString()函数得到以下结果: 运行次数时间string1万次0.078125秒StringBuilder一百万次0.046875秒结论:使用StringBuilder对字符串动态追加的速度是string的200倍左右。补充:针对不同的字符串长度和不同的操作,比如Remove,性能表现会各不一样。需要一个一个测试。


1. bool是基本值类型,Boolean 是对象. 

2. bool是Boolean的别名.bool是C#中的,Boolean是.net Framework中的。
用Reflector反汇编了下mscorlib.dll,得到Boolean的源代码,看到了下面的内容:
public struct Boolean : IComparable, IConvertible, IComparable<bool>, IEquatable<bool>
{
private bool m_value;
//省略其他成员的定义..... }
MSDN中解释bool与Boolean的关系是:“bool 关键字是 System.Boolean 的别名”.实际使用无任何差别。它们的成员也是一样的。
最后总结:bool就像你的乳名,你爹妈以及你们内部所属成员都认识,Boolean就像你的学名。大家都认识。不过不管按照学名还是乳名称呼你,最终的 目的是一样的,还是你这个人。
对于String和string的关系也是如此。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多