zoukankan      html  css  js  c++  java
  • 引用类型与值类型详介,装箱与拆箱

    简说引用类型与值类型

     

    说到引用类型与值类型,肯定就是在说C#语言。

    1.首先说下C#语言中那些是值类型,那些事引用类型

    值类型有:基本的数值类型,char ,byte, int, struct, 枚举, 

    引用类型有:数组,String ,类,委托 ,Object

    一般的能用 new关键字声明的类型都是引用类型

     

    2.他们在内存中的存放

    值类型的值是   放在内存得线程栈空间内

    引用类型的值是 放在内存中的托管堆空间内,而线程栈空间中存放的是堆空间中存

    值的地址

    要说明的是线程栈和托管堆都是 程序员为了方便记忆和和说明命名的,无别的意义。

    值类型和引用类型还有一个重要的内容就是:

    装箱和拆箱

    装箱:值类型转换成引用类型

    拆箱:把装箱后的对象转换成值类型的过程。

    注意:装箱拆箱过程有性能的损耗。

      对与值类型装箱拆箱保持不变性,堆引用类型不保持(保持相关性)

    例:

    struct Person

    {

    public String name;

    public Car car;

    }

    class Car

    {

    public String name;

    Static void Main(String[] args)

    {

           Person p1;

                p1.Name = "张三";

                p1.car = new Car();

                p1.car.Name = "兰博基尼mini";

     

                object o = p1;

     

                p1.Name = "三丰";

                p1.car.Name = "法拉利";

     

                Person p2 = (Person)o;

     

                Console.WriteLine(p2.Name);

                Console.WriteLine(p1.car.Name);

                Console.WriteLine(p2.car.Name);

                Console.ReadKey();

     

    运行输入结果是:张三

    法拉利

    法拉利

    由于String类型的不变性,所以当p1.name改变是它的值不会改变

    Car指向的地址没变,所以值变了

    }

     

    用图形说明是:

     

     

     

     

    关于引用类型,值类型就到这了

     

     

  • 相关阅读:
    mysql插入中文数据变成问号怎么处理
    项目第二阶段
    项目第一阶段
    项目测试
    常用mysql操作
    常用的mysql操作
    mysql操作
    土地档案管理系统需求分析
    土地档案管理系统架构图,ER图,用例图
    Load data local infile
  • 原文地址:https://www.cnblogs.com/jaifyhome/p/2544034.html
Copyright © 2011-2022 走看看