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指向的地址没变,所以值变了

    }

     

    用图形说明是:

     

     

     

     

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

     

     

  • 相关阅读:
    DGA域名可以是色情网站域名
    使用cloudflare加速你的网站隐藏你的网站IP
    167. Two Sum II
    leetcode 563. Binary Tree Tilt
    python 多线程
    leetcode 404. Sum of Left Leaves
    leetcode 100. Same Tree
    leetcode 383. Ransom Note
    leetcode 122. Best Time to Buy and Sell Stock II
    天津Uber优步司机奖励政策(12月28日到12月29日)
  • 原文地址:https://www.cnblogs.com/jaifyhome/p/2544034.html
Copyright © 2011-2022 走看看