• 值类型和引用类型


    好久没更新了,出来透透气。。。。
    在网上发现很多关于值类型和引用类型的问题,说一下自己的理解()...
    值类型:在作为参数传递时被复制(即,它们通过值来传递)。
    引用类型:类类型、接口类型、数组类型或委托类型。
    值类型是存储在堆栈上的,对值类型变量赋值将创建所赋的值的一个副本。
    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,在实际的赋值过程中传递的是值。
  • 相关阅读:
    绘制矩形
    绘制线条
    画直线
    画弧线
    绘制贝塞尔曲线
    我关注的一些博客或资源链接
    vim必记指令
    mac下使用vim gcc/g++ 编译cpp(c++)文件并运行
    机器学习算法中如何选取超参数:学习速率、正则项系数、minibatch size
    正则化方法:L1和L2 regularization、数据集扩增、dropout
  • 原文地址:https://www.cnblogs.com/oldhorse/p/352809.html
Copyright © 2020-2023  润新知