c#中的字符串?

来源:百度知道 编辑:UC知道 时间:2024/05/16 00:39:33
c#中字符串string应该是一个类,为什么可以直接定义一个字符串变量string a="admin"而不用new出一个来?而且string是引用类型的,为什么定义两个变量为相同的字符串,输出比较他们是否一样为true?

1.""是字面量,即用常量表示类型,有点类似sql用##表示日期。在C#字面量比较少,就字符串、整形、浮点之类的,VB.NET连XML都可以用字面量直接表示
2.这是常量池,字符串和数值字面量会放到常量池中以节省空间加快速度,当然用new的不会放到常量池中

public static bool operator ==(
string a,
string b
)

==运算符被重写了。比较的是它们的值,而不是地址。

你可以尝试如下:
string a = new string(new char[] { 'a','d','m','i','n' });
为什么可以这样创建,参考MSDN中String的构造函数的说明。

不用new的原因,在于string类在构造函数里就已经定义为static,有条件的话你可以看看.net framework的源代码就明白了。
-----------
引用类型也好,值类型也好,都是可以比较的,这个没什么可谈的。
如果要了解值类型和托管堆上的引用类型本质,要深入虚拟机的底层,
一般人也没必要去深入,没什么意义。

你说的类是String,而不是string,C#中大小写敏感的。