二十七:使用String类型(二)

     String对象是不可变的(immutable),也就是说,字符串在创建之后就不能再改变,使字符串不可变有几个好处,首先,它允许在一个字符串上执行各种操作,而不实际地改变字符串,如下:

if(s.ToUpperInvariant().Substring(10,20).EndsWith(".EXE"))

{

//...

}

     在此,ToUpperInvariant返回一个新的字符串,它没有修改字符串s的字符。在ToUpperInvariant返回的字符串上执行的Substring操作也返回一个新的字符串,然后这个字符串由EndsWith进行检查。ToUpperInvariantSubstring创建的两个临时字符串不会由应用程序长久的引用,垃圾收集器会在以后回收它们的内存。如果执行大量的字符串操作,便在堆一创建大量的String对象,造成更加频繁的垃圾收集,从而妨碍应用程序的恨不能。要想高效的执行大量字符串操作,最好使用StringBuilder类。

     使字符串不变,还意味着在操作或访问一个字符串时不会发生线程同步问题,除此之外,CLR可以通过单个String对象来共享多个完全一致的内容,这样能减少系统中的字符串数量,从而节省内存。

 

 

 

 

posted @ 2009-02-03 23:45  Done  阅读(277)  评论(0编辑  收藏  举报