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

    1、管理机制:

    主要指对内存空间进行分配和释放

    值类型(栈):作用域结束时被操作系统自行释放

    (值类型的变量直接存储数据,分配在托管栈中。变量会在创建它们的方法返回时自动释放,例如在一个方法中声明Char型的变量name=’C’,当实例化它的方法结束时,name变量在栈上占用的内存就会自动释放)
    引用类型(堆):垃圾回收器(GC)负责

    (引用类型的变量持有的是数据的引用,数据存储在数据堆,分配在托管堆中,变量并不会在创建它们的方法结束时释放内存,它们所占用的内存会被CLR中的垃圾回收机制释放。)

    2、内存分配:

    值类型:值类型实例总会分配到变量被申明的地方

    • 申明的是局部变量,将被分配到栈上
    • 申明为引用类型成员时,则被分配到管理堆上

    引用类型:

    • 实例总是分配到托管堆上
    • 变量存储在栈中。引用类型的变量存放的则是数据的地址,即对象的引用。

    3、赋值方式:

    值类型:复制变量包含的值
    引用类型:复制对象引用,即对象的地址

     堆一般用于存储可变长度的数据,而堆栈则用于存储固定长度的数据

    装箱和拆箱

    1)装箱就是将一个值类型转换成等值的引用类型

    在堆上为新生成的对象(该对象包含数据,对象本身没有名称)分配内存。

    将堆栈上值类型变量的值拷贝到堆上的对象中。

    将堆上创建的对象的地址返回给引用类型变量(从程序员角度看,这个变量的名称就好像堆上对象的名称一样)。

    2)拆箱就是将一个引用类型转换成等值的值类型

    将引用类型变量堆上的值拷贝到栈上面。

    4、基类:

    值类型:继承自System.ValueType;System.ValueType又继承自System.Object
    引用类型:引用类型继承自System.Object

    值类型包括:数值类型,结构体,bool型,用户定义的结构体,枚举,可空类型。

    引用类型包括:数组,用户定义的类、接口、委托,object,字符串,null类型,类。

    总结

    值类型和引用类型理解透彻后,我们知道C#里面是值传递,但是有些变量是引用类型的,在传递和拷贝时需要特别注意。方法传递参数时加上ref(out),为引用传递参数。

    值传递仅仅传递的是值,不影响原始值。

    引用传递,传递的是内存地址,修改后会改变内存地址对应储存的值。



  • 相关阅读:
    xml转json
    3DES双倍长加密
    数据的集合运算
    SQL:1999基本语法
    表的连接操作
    数据库的连接
    表空间的创建
    用户的创建
    通用函数
    转换函数
  • 原文地址:https://www.cnblogs.com/QueryWord/p/14133911.html
Copyright © 2011-2022 走看看