一. 值类型和引用类型
值类型和引用类型的区别在于在内存中的存储方式,值类型存储在堆栈上,而引用类型存储在托管堆上,例如:- //因为int是值类型,所以一下代码会在内存中创建两个位置存储两个10
- int i = 10;
- int j =i;
复制代码- //而以下代码,由于Class是引用类型,所以只在内存中开辟了一块区域,而有两个(cc和ccc)指向它的引用
- class Program
- {
- static int i = 10;
- static void Main(string[] args)
- {
- C1 cc = new C1();
- C1 ccc = cc;
- }
- }
- class C1
- {
- int val;
- }
复制代码 所以当有如下代码:- cc.val = 30;
- ccc.val = 50;
复制代码 当执行上一句的时候,cc和ccc的val值都是30,下面一句执行之后都会变成50,这点注意区别。
值类型 | sbyte | short | int | long | byte | ushort | uint | ulong | float | double | decimal | book | char | struct | |
| 引用类型 | Object,string | |
需要注意的是bool,char还有结构体都是值类型,string是较为特殊的一种引用类型,所以string被分配在托管堆上,而不是堆栈上,但string类型一旦被创建,则不可更改,这点和其他引用类型不同,所以对其的修改都是创建一个新的string,而把对原来的引用更新到指向新的这个,例如:- string s1 = "abcde";
- string s2 = s1;//此时si,s2指向同一个string
- s2 = "ABCDE";//s2指向“ABCDE”,而此时si指向原来的“abcde”
复制代码 PS:注意,char类型有单引号引起来,而string是双引号
其他C#基础请看这里
|