Q-->question        A-->answer        M-->mention
          The Chapter 11st  Char,String,Text

M:字符串池=>
  如果一个字符串直接量在源代码中多次出现,则引用该字符串的所有源代码都将被修改,因为编译器只会在元数据中写入一次,以减少文件体积,此为很多编译器都有,MS称为字符串池

M:字符串调用所有方法都将会是返回新串,因为字符串是不可变的(immutable)---在代码安全的前提下

Q:何为StringBuilder?
A:其为一个特殊构造器,其内部包含一个Char数组,其成员方法操纵此数组,如果字符串变大,超过了已经分配的数组大小,SB就会自动分配一个新的,更大的数组,复制字符串并开始用新数组,旧的将会被GC回收.

M:StringBuilder的构造器的12个重载版本会维护其内部的最大容量及字符数组状态,SB的动态扩容会损害性能.要避免比危害,需设置一个合适的最初始容量. SB.Length写为0,将会分配一个新的字符数组,SB.AppendFormat()为最常用的方法.其会在字符数组末尾附加多个对象,会使用调用者提供的格式和语言文化信息.


Q:StringBuilder在何种情况下会在堆中重新分配引用?
A:1.试图动态构造一个字符串,其长度超过事先设置的容量
  2.在调用SB的ToString()时修改字符数组,如使用StartIndex和EndIndex参数.

M:安全字符串,System.Security.SecurityString
  构造此对象时,会在其内部分配一个非托管的内在块,其中包含一个字符数组,在调用Dispose()时,会将其内在缓冲区清零,释放缓冲区.以达到安全的目的.

posted on 2007-06-12 12:58  晓木  阅读(260)  评论(0编辑  收藏  举报