您的位置:首页 > 编程语言 > C#

c#基础知识(二)

2012-08-06 11:32 225 查看
1、值类型、引用类型

值类型,包括struct、enum、以及基本数据类型(int,char等),值类型是创建在线程栈上。值类型都隐式派生至system.valueType。

引用类型,包括class、string、array等,引用类型创建在托管堆上,由gc负责清理。

这篇文章讲的比较详细:/article/5651094.html

string是一种特殊的引用类型,是一种不可变的引用类型。

String str1 = "abc";

String str2 = "abc";

CLR使用了一种叫字符串驻留的技术,当CLR初始化时,会创建一个内部的散列表,其中的键为字符串,值为指向托管堆中字符串的引用。刚开始,散列表为空,JIT编译器编译方法时,会在散列表中查找每一个文本常量字符串,首先会查找"abc"字符串,并且因为没有找到,编译器会在托管堆中构造一个新的指向"abc"的String对象引用,然后将"abc"字符串和指向该对象的引用添加到散列表中。接着,在散列表中查找第二个"abc",这一次由于找到了该字符串,指向同一个String对象的引用会被保存在变量str2中,到此str1和str2指向了同一个引用。

String 对象是不可改变的。每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串对象,这就需要为该新对象分配新的空间。在需要对字符串执行重复修改的情况下,与创建新的 String 对象相关的系统开销可能会非常昂贵。如果要修改字符串而不创建新的对象,则可以使用 System.Text.StringBuilder 类。例如,当在一个循环中将许多字符串连接在一起时,使用 StringBuilder 类可以提升性能。

2、boxing与unboxing

参见:http://www.csharpwin.com/csharpspace/7709r6892.shtml

参见:http://www.byywee.com/page/M0/S450/450296.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: