string 只是 String 的一个别名,以下三种写法都可以
string myName="YZX";
String myName="YZX";
System.String myName="YZX";
http://www.cnblogs.com/skywind/archive/2007/04/30/733414.html 中有写到"在C#的编译时,会自动的把string转化为Sysem.string 即 using string = System.String;"
由于string是C#中的关键字,我们可以统一使用第一种写法
String虽然是类,但却不能用如下方法赋值:
String s1=new String("test");
编译器提示错误
与“string.String(char*)”最匹配的重载方法具有一些无效参数
有些示例还用以上方法写,我不知道它们是怎么编译通过的。
但是却有这样赋值方法:
String s1=new String('*', 5);
生成"*****"这个字符串给s1
如果只是取字符串的其中一位,除了用Substring函数外,还可以直接这种表达:
Console.WriteLine("hello"[1]);
字符串中==是比较值,而如果要比较对象,要使用(object)来强制转换,或者用Object.ReferenceEquals来检测。
如下代码能说明什么问题:
using System;
class m
{
public static void Main()
{
string str1="YZX";
String str2="YZX";
Console.WriteLine(str1==str2);
Console.WriteLine((object)str1==(object)str2);
string a = "hello";
string b = "h";
b += "ello"; // append to b
Console.WriteLine(a==b);
// output: True -- same value
Console.WriteLine((object)a==(object)b); // False -- different objects
}
}
运行结果:
True
True
True
False
第一个True与第三个True好理解,但第二个却是True,而第四个却是False。可以通过GetHashCode查看字符串是否使用同一位置的。原来字符串分配时有个特点:
值相同的字符串不重复添加,相同字符串在内存中只保存一份
http://www.cnblogs.com/JoeDZ/archive/2008/06/27/1230857.html中
class Test{
static void Main(string[] args){
string a = "1";
string b = "1";
string c = "2";
}
}
}
使用visual studio 2005中的调试,转到反汇编,可以得到下面内容:
......
string a = "1";
0000002b mov eax,dword ptr ds:[022C3048h] // 与下面相同
00000031 mov ebx,eax
string b = "1";
00000033 mov eax,dword ptr ds:[022C3048h] // 与上面相同
00000039 mov esi,eax
string c = "2";
0000003b mov eax,dword ptr ds:[022C307Ch] // 不同
......
@的使用
这样的代码编译不会通过
string str1="C:\Window";
Console.WriteLine(str1);
错误信息:无法识别的转义序列
要这样写
string str1="C:\\Window";
或这样写
string str1=@"C:\Window";
有@标志后,后面就可以不用转义来说明了。@甚至可以写出这样的代码:
string str1=@"C:\Win
dow";
Console.WriteLine(str1);
即中间有带回车符。输出时也是带回车符。
一些Unicode的字符,可以这样输入;
"\uXXXX" 或 "\UXXXX"