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

    在C#中,所有类型都可划分为值类型和引用类型。值类型包括简单类型、结构体类型和枚举类型;引用类型包括自定义类、数组、接口、委托等。

    值类型直接存储其值,变量本身就包含了其实例数据,而引用类型保存的只是实例数据的内存引用。因此,一个值类型变量就永远不会影响到其他的值类型变量,而两个引用类型变量则很有可能指向同一地址,从而发生相互影响。

    从内存分配上来看,值类型通常分配在线程的堆栈上,作用域结束时,所占空间自行释放,效率高,无需进行地址转换,而引用类型通常分配在托管堆上,由GC来控制其回收,需要进行地址转换,效率降低。

    下面通过简单示例来演示值类型与引用类型的区别。

    01 class MyInt                                    //类是引用类型

    02 {

    03 public int I;

    04 }

    05 static void Main(string[] args)

    06 {

    07 int num1 = 123;                            //简单数据类型为值类型

    08 int num2 = num1;                        //将值复制给新变量

    09 num1 = 345;                            //修改num1的值并不影响num2的值

    10 Console.WriteLine("num1={0,-10}num2={1}", num1, num2);

    11 MyInt i1 = new MyInt();                    //类类型为引用类型

    12 i1.I = 123;

    13 MyInt i2 = i1;                            //进行引用复制

    14 i1.I = 345;                                //修改i1的值,将影响i2的值。

    15 Console.WriteLine("i1.I={0,-10}i2.I={1}", i1.I, i2.I);

    16 }

    简单数据类型为值类型,这里用int类型为例,创建两个变量:num1和num2,其中num2的值是通过复制num1的值得到的,之后修改num1的值,因为值类型的变量分别进行存储,改变一个变量的值,并不会影响另一个变量的值,所以修改num1的值并不影响num2的值。

    类类型为引用类型,这里创建了一个简单的自定义类MyInt(本书尚未涉及到面向对象的知识,如果您对类尚不熟悉,需要查阅相关资料进行学习),只包含一个简单的数据成员I。同样定义两个变量,i1和i2,i2是通过复制i1的引用完成的赋值,i1和i2占用同一块内存,任何一个变量值的变化,都会影响到另一个变量。这里修改i1的值,i2的值同时发生改变。

    测试结果如下:

    34 测试结果

    关于值类型与引用类型,这里只能是给您介绍一下简单的概念,让您知道值类型与引用类型的存在,更多详细信息,您可查阅其他书籍或网络搜索相关资料,这里不再累述。

  • 相关阅读:
    MySQL中 Data truncated for column 'xxx'解决方法
    JAVA中循环删除list中元素的方法总结
    Java 键盘输入数字(空格隔开) 将数字存入数组
    linux查看服务器并发连接数
    解决 httpclient 下 Address already in use: connect 的错误
    知识点--实际开发中软引用或弱引用的使用场景
    无序hashset与hashmap让其有序
    bool的值分别为0,1;那哪个代表true哪个代表false?
    jquery-ui autocomplete在模态框(model)中,出不来
    vue-Treeselect实现组织机构(员工)下拉树的功能
  • 原文地址:https://www.cnblogs.com/myzw/p/7371788.html
Copyright © 2011-2022 走看看