• 值类型和引用类型


     

    数据类型分为两种:值类型和引用类型,这两种类型的对象在内存的存储方式不同。

    定义:  

          引用类型:表示操作的对象是同一个,即当传一个参数给另一个方法时,在另一个方法中改变这个变量的值,那么调用这个方法时传入的值也将发生变化。

          值类型:表示复制一个当前变量传递给方法,在方法中改变这个值时,最初生命的变量值不会改变。

    值类型

          值类型及基本数据类型,常被分为四类八种:

                四类:整型,浮点型,字符型,逻辑型

                八种:1,整型3种 byte, short, int, long

                         2,浮点型 float, double

                         3,字符型 char

                         4,逻辑型 boolean

    引用类型

           除了四类八种的基本类型,其他数据类型都是引用类型,例如:string类型,object类型等。

    传递:

           值传递:基本数据类型复制都属于值传递。传递的是实实在在的变量值,是原参数的拷贝,实参传递给形参的值,形参发生变化而不影响实参。

           引用传递:引用类型之间的赋值属于引用传递。传递的对象是引用的地址,即将实参的地址传递给形参,形参改变了实参也相应发生变化,因为指向同一个地址。

    存储:

       1.    值类型:只需一段单独的内存,用于存储时间的数据。

              引用类型:需要两端内存:

                    第一段:实际数据,总是位于堆中

                    第二段:一个引用,指向数据在堆中的存储位置

              数据如果不是其他类型的成员就会像下图一样存贮,对于值类型数据放在栈中。对于引用类型数据放在堆中而引用放在栈中

        2.存储引用类型对象的成员

              引用类型对象的数据始终存储在堆中,如下图。

              值类型数据,或引用类型数据的引用可以放在堆里,也可以放在栈里。

    例如:引用类型的对象名称为MyType,有两个成员:一个值类型成员和一个引用类型成员,将如何存储呢?

            对于一个引用类型,其实例的数据始终放在堆里。既然两个成员都是对象数据的一部分,那么他们都会被放在堆里,无论是值类型还是引用类型 如图:

       

    装箱和拆箱

         装箱就是值类型转化为引用类型的过程。将一个值类型变量装箱成一个引用类型变量,首先会在托管堆上为新的引用类型变量分配内存空间,然后将值类型变量拷贝到托管堆上新分配的对象内存中,然后返回新分配的对象内存地址。  

    例如:
    int val = 100;
    object obj = val;
    Console.WriteLine (“对象的值 = {0}",obj);
     
         拆箱操作即是装箱的逆操作,拆箱的过程,是将值类型转换为引用类型,再由引用类型转换为值类型的过程。
    例如:
    int val = 100;
    object obj = val;
    int num = (int) obj;
    Console.WriteLine ("num: {0}",num);
  • 相关阅读:
    企业微信应用授权
    exec存储过程示例
    jquery判断对象是否存在
    IScroll5要防止重复加载
    transitionEnd不起作用解决方法
    微信接口 output {"errMsg":"translateVoice:fail, the permission value is offline verifying"}
    javascript保留两位小数
    html取消回车刷新提交
    企业微信后台登录
    企业微信开启开发者工具
  • 原文地址:https://www.cnblogs.com/xishuqingchun/p/3674032.html
Copyright © 2020-2023  润新知