值类型和引用类型

好久没更新了,出来透透气。。。。
在网上发现很多关于值类型和引用类型的问题,说一下自己的理解()...
值类型:在作为参数传递时被复制(即,它们通过值来传递)。
引用类型:类类型、接口类型、数组类型或委托类型。
值类型是存储在堆栈上的,对值类型变量赋值将创建所赋的值的一个副本。
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的改变而改变。
引用类型分配在托管堆中,一个引用类中的值类型分配在托管堆中,对引用类    型变量赋值将创建引用的副本,而不是引用对象的副本。
 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的改变而改变。因为他们指向同一个引用。
    上面的两个代码片断可以很清楚的看到值类型和引用类型的区别,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,在实际的赋值过程中传递的是值。
原文地址:https://www.cnblogs.com/oldhorse/p/352809.html