c#基础知识(二)
sshong 发表于2013年2月3日 12:04:19 更新于2013年2月3日 12:39:18
1、值类型、引用类型

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

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

这篇文章讲的比较详细:http://www.cnblogs.com/siqing99/archive/2012/04/03/2430918.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
标签:CLRboxing分类:C#阅读:2791
评论
暂无评论
添加评论
您的大名,限长10汉字,20英文(*)
电子信箱(*)
您的网站
正文,限长500汉字,1000英文(*)
验证码(*) 单击刷新验证码
联系我
博客订阅