关于c#里的string 类型(转http://xianyun0216.blog.51cto.com/714887/167194)

来源:互联网 发布:qq举报软件安卓版 编辑:程序博客网 时间:2024/04/27 19:13
String 是字符串类型,它是个特殊的引用类型,特殊特殊到那呢?一直不解,近期大概发现了一些特殊。
String a=abc;
String b=abc;
这里的a b 不但值相同而且其引用的内存区域也相同。
当将b变成“bcd”时候,b的引用就不再指向a所指向的内存区域。
而是重新开辟了另一块内存空间。
其实更严格的说是b 找所有的内存区域,如果没有和所指向区域值相同的内存区域则开辟新的,放置这前所未有的值
而且在c#中要判断两个string类的对象的值是否相同,有两种方法即
1==
2,equals()
);
要是想判断他们是否指向同一个引用则这两个对象向上转型,
转成object对象。
下面是一个经典的题:
Class test
{
      Public static void change(string  x, string  y)
{
x=”bcd”;
y=x;
Console.writeLine(x)
Console.writeLine(y)
}
Static void main(string [] args)
{
String a=”abc”;
String b=”bcd”;
Change(a,b);
Console.writeLine(a);
Console.writeLine(b);
Console.ReadLine();
}
}
输出后结果:
bcd
bcd
abc
bcd
 
a
b
abc
bcd
当调用方法时:
Chang(a,b);
就相当于做了
String x=a
String y=b;
于是就有了:
a
b
abc
bcd
x
y
当执行
x=”bcd”;
y=x;
a
b
abc
bcd
x
y
所以有了如上结果。
String是引用类型值传递;
数组是值类型引用传递

本文出自 51CTO.COM技术博客

 

注:String 是引用类型,不过是不可变的。对字符串做一些操作(比如大小写的转换、+=), 实际上是重新创建了一个字符串(重新分配一块内存)。这也是为什么在做大量字符串拼接的时候要使用StringBuilder 而不用+=。