Welcome

首页 / 软件开发 / .NET编程技术 / .NET,你忘记了么?(六)——再谈String

.NET,你忘记了么?(六)——再谈String2011-04-12 博客园 飞林沙一. 文章伊始

在文章之前,说下写出这篇文章的目的。在我昨天的一篇文章<<重温设计模式(一 )——享元模式(Flyweight) >>中,我在文中提到了关于String的字符串驻留机制。 在文章的评论中,杨同学对我的字符串相关观点提出质疑,并且成文,不过我现在无法找到 那个链接了。

于是,我想把这个老掉牙的话题在此重谈。

究竟我们对String这个常用的类型有多少理解。

二. 从C看起

是我接触的第一个程序语言。还记得当时给我的C语言老师是一个专业做Java SOA的 老师。

于是,她在讲授C的时候经常给我们时不时地与Java做着对比,尽管我们当时并不懂Java 是个什么东东,只知道这个词经常出现于手机游戏上。

当时我还记得老师一句很经典的话:我们要记得,C中没有字符串这个概念(其实我们当 时还不懂什么是字符串),所谓的字符串在C中表现为字符数组。

那就让我们来复习一下,在C中的“字符串”的表现形式:

char s[]=”abc”;

接下来,我们便可以使用s去调用各种“字符串”函数。

那么我们可以清楚地看到在C语言中,“字符串”其实存储的就是字符数组的首地址,那 么在.NET中又是如何呢?

三. String vs string

在学校的时候,这个问题被同学无数次问过,尤其是很多学Java的朋友。

string其实就是String的别名,当二者编译为IL代码时,二者并无区别,正如int之于 System.Int32。

二者的分别仅仅在于:

1. string是C#语言的基元类型,看起来更C#。

2.System.String是FCL的基元类型。

我常常是这样来使用:

1. 如果涉及到语言的互操作,那么毋容置疑,一定是System.String,不再赘述,如有问 题,请参考<<.NET,你忘记了么?(一)——遵从CLS>>.

2. 如果只是声明一段字符串,我会使用string,看上去可读性更高,类似于你会使用int i=3;而很少见到System.Int32 i=3一样。

3. 如果是涉及到使用字符串的静态方法,那么我常常使用System.String,因为String看 起来更像一个类。