zoukankan      html  css  js  c++  java
  • 值类型和引用类型

    好久没更新了,出来透透气。。。。
    在网上发现很多关于值类型和引用类型的问题,说一下自己的理解()...
    值类型:在作为参数传递时被复制(即,它们通过值来传递)。
    引用类型:类类型、接口类型、数组类型或委托类型。
    值类型是存储在堆栈上的,对值类型变量赋值将创建所赋的值的一个副本。
    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,在实际的赋值过程中传递的是值。
  • 相关阅读:
    判断当前是否运行于Design Mode
    从Setting.settings到Resource.resx
    构造函数强制使用new
    getFullYear 方法
    前端开发中经常使用到的20个正则表达式。
    函数调用模式
    javascript中return的作用
    javascript数组遍历for与for in区别详解
    闭包
    js split 的用法和定义 js split分割字符串成数组的实例代码
  • 原文地址:https://www.cnblogs.com/oldhorse/p/352809.html
Copyright © 2011-2022 走看看