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
值类型,包括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
相关文章推荐
- C#基础知识整理 基础知识(16) IList接口——非泛型
- C# 基础知识系列之 C#编程基础
- [C# 基础知识系列]专题一:深入解析委托——C#中为什么要引入委托
- [C#基础知识系列]专题十二:迭代器
- C#事件和委托的基础知识模型
- 黑马程序员--01 c#基础知识
- C#中的多线程 - 基础知识 z
- C#开发-基础知识及有用技巧
- 实例总结C#反射基础知识
- C# 基础知识 (三).主子对话框数值传递
- 黑马程序员————————C#基础知识之结构体(二)
- C#基础,面向对象OOP及OOD的相关知识
- C#基础知识
- C#基础知识之三
- C#基础知识(4)
- C#基础知识回顾--委托事件
- 黑马程序员_学习日记2_有关C#基础知识总结归纳之对象和类型
- c#基础知识---转义序列
- [C#基础知识]关于虚函数Virtual 及 抽象函数Abstract
- C#基础知识系列九(对IEnumerable和IEnumerator接口的糊涂认识)