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

    区别:

    1:在存储区上的区别: 值类型是存储在栈上面的,引用类型是存储在堆上面的。
     2:在赋值上,值类型是直接赋新值给变量,但是引用类型是开辟一块新的空间来存放新值,并将之前指向旧的值的那个地址改成指向新的值的地址。这就完成了一次赋值的操作。
    在对应用类型进行赋值的时候:  首先,我们先从定义和赋初始值开始说起, 引用类型在被申明的时候,首先在堆中开辟一块内存空间,然后将其在堆中的地址赋值给 栈 中的一快空间,这块空间就是来放一个引用类型在堆中的地址的。然后我 对其进行重新赋值的时候,并不是将堆中的值给改变了,而是在堆中重新开辟了一块新的空间,然后将堆中的这个地址赋值给  之前这个变量在栈中开辟那块存堆中的地址的那个地址,所以之前的那个最先开辟在堆中的空间是不会被消除的,除非.Net FrameWork这个框架中的垃圾回收站自动帮我们完成释放内存的功能,但这是在程序运行结束后才会做,所以我们如果对引用类型的变量  的话,我们应该尽量减少对其的重新赋值,就想string这个引用类型一样,我们如果需要对字符串进行重复的赋值和处理,我们一般不会用string这个字符串来处理,   我们一般使用stringBuild 来处理字符串重新赋值的问题。

    值类型:C#的所有值类型均隐式派生自System.ValueType;判断是否为值类型:Type.IsValueType
    1.所有整形:sbyte(System.SByte)、short(System.Int16)、、int(System.Int32)、long(System.Int64)、byte(System.Byte)、ushort(System.UInt16)、uint(System.UInt32)、ulong(System.UInt64)、char(System.Char)。
    2.所有浮点型:float (System.Single)、double(System.Double)。
    3.高精度类型:decimal(System.Decimal)。
    4.bool(System.Boolean);
    5.结构体、枚举类型。

    引用类型:
    1.数组(派生于System.Array)
    2.类:class(派生于System.Object)
    3.接口:interface
    4.委托类型:delegate(派生于System.Delegate)
    5.字符串:string(System.String的别名)
    6.Lambda表达式:C#的Lambda 表达式都使用 Lambda 运算符 =>,该运算符读为“goes to”。语法如下:形参列表=>函数体函数体多于一条语句的可用大括号括起。如下:
    delegate int del(int i);
        del myDelegate = x=>{return x*x;};
       int j = myDelegate(5);//j=25

    装箱:将值类型转换为引用类型 。装箱时,生成的是全新的引用对象,这会有时间损耗,也就是造成效率降低,尽量避免装箱。 
    拆箱:将引用类型转换为值类型。

    一直想把之前工作、学习时记录的文档整理到博客上,一方面温故而知新,一方面和大家一起学习 -程序小白
  • 相关阅读:
    时间操作、时间戳
    滚动条大于120px时,判断pc端的情况下,导航条固定定位
    通过js中的useragrent来判断设备是pc端还是移动端,跳转不同的地址
    js构建函数,点击按钮显示div,再点击按钮或其他区域,隐藏div
    localStorage用法总结
    轮播插件、原生js编写,弄懂这个,基本上各种轮播都可以自己写了
    (原)选择远比努力重要
    Java线程之间通信
    迪杰斯特拉(Java)
    FFTW中文参考
  • 原文地址:https://www.cnblogs.com/wang-jin-fu/p/8321240.html
Copyright © 2011-2022 走看看