在网上发现很多关于值类型和引用类型的问题,说一下自己的理解()...
值类型:在作为参数传递时被复制(即,它们通过值来传递)。
引用类型:类类型、接口类型、数组类型或委托类型。
值类型是存储在堆栈上的,对值类型变量赋值将创建所赋的值的一个副本。
1
int i = 0;
2
int j = i;
3
i= 1;
4
Console.Write("i={0},j={1}",i,j);
运行结果为:i=0,j=1;j不随着i的改变而改变。
2

3

4

引用类型分配在托管堆中,一个引用类中的值类型分配在托管堆中,对引用类 型变量赋值将创建引用的副本,而不是引用对象的副本。
1
class test
2
{
3
/// <summary>
4
/// 应用程序的主入口点。
5
/// </summary>
6
[STAThread]
7
static void Main(string[] args)
8
{
9
ObjectPrint OF = new ObjectPrint();
10
OF.num = 5;
11
ObjectPrint OT = OF;
12
OT.num = 6;
13
Console.Write("i={0},j={1}",OF.num,OT.num);
14
}
15
}
16
class ObjectPrint
17
{
18
public int num=0;
19
}
运行结果为:i=6,j=6;OF.num随着OT.num的改变而改变。因为他们指向同一个引用。
2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

上面的两个代码片断可以很清楚的看到值类型和引用类型的区别,ok,继续执行下面的代码:
1
string Snum = "0";
2
string Snumt = Snum;
3
Snumt = "1";
4
Console.Write("Snum={0},Snumt={1}",Snum,Snumt);
运行结果为:Snum=0,Snumt=1;string也是引用类型,为什么同是引用类型会有不同的情况产生。因为string是一个比较特殊的引用类型,string之间的赋值是开辟了一块内存将源string拷贝到目标string,在实际的赋值过程中传递的是值。

2

3

4
