zoukankan      html  css  js  c++  java
  • 现金与存折---值类型和引用类型

         在软考的时候也接触过值类型和引用类型,那时候应付做题还是能够的,但是考完之后再突然面对这两个词汇,又认为迷茫无措了。如今想想,还是实践吧,当时仅仅是简单的了解了其原理,没实用代码来实现,所以仅仅能算是初步的,临时的了解。这篇文章就是为了弥补初步的遗憾,进行深一步的学习。

         理论联系实践,才是对现实的超越。就像门和钥匙一样,完美结合才有防窃和安全之功效。所以,该篇文章的主要思路也是从理论和实践两个方面分别对“值类型和引用类型”进行具体阐述。


    -------------------------------------------理 论 篇------------------------------------

         

         1.值类型

         直接将内存存储在栈内,由系统自己主动释放资源的数据类型。简单来说:值类型就好像现金,须要的时候直接用就能够;

         2.引用类型

         由类型的实际值引用表示的数据类型。简单来说:引用类型就好像是存折,须要的时候必须先去银行换成现金,然后使用。

        3.两者对照

         先用一张简单的图表显示,更为直观易懂。

        

     

    -------------------------------------------实 践 篇------------------------------------

         

         看了上图后,会对值类型和引用类型有个大概的了解,以下具体说说两者在内存分配方面的差别。

         如上表可知,值类型变量是在栈内存中分配空间,引用类型则是在堆内存中分配空间的。这么说是什么意思呢?通过以下的代码实例和内存分配图来看看吧。

    //首先,构造一个最简单的类引用类型
    Publicclass MyClass
    {
    }
     
    //然后,对照值类型和引用类型
    private static void Main()
    {
    int i;                    //定义值类型变量
    MyClass mc;    //定义引用类型变量
     
     
    i = 5;               //值类型变量的赋值
    mc = new MyClass();    //创建引用类型变量
    }

         非常easy的一段代码,我们就以此为例,配合内存分配图,来具体对照一下值类型和引用类型在内存分配上的差别。

         首先是他们共同的開始,那就是仅仅要是变量(无论是值类型还是引用类型变量)声明后,都会在栈内存中分配其对应的一部分空间。例如以下图:

                                                                                                       

         至于这部分空间里存放的是什么东西,就要看这个变量是值类型还是引用类型了。


         (1)值类型

    i = 5;               //值类型变量的赋值

         当为值类型变量进行赋值时,栈内存中存放的就是这个值类型自身的值。例如以下图所看到的:

                                                                                                      

         由图可知,值类型变量本身所占的内存中就存放着其值,就好比上文提到的“现金”一样,须要用的时候直接使用就能够,非常easy,一步就可到位。


        (2)引用类型

    mc = new MyClass();    //创建引用类型变量

         当为引用类型变量时,不只须要在栈内存中为其分配空间,也要在堆内存中为其分配适当的空间。只是这里须要注意,须要了解的就是---栈内存中存放的是什么?堆内存中存放的又是什么?还是看图来说话吧:

               

         由图可知,引用类型变量的值是存放在堆内存中的,在栈内存中存放的则是该变量在堆内存中相相应的首地址,就好比是“存折”一样,栈中存放的仅仅是存折的账号,须要使用时,我们还须要依据栈中的“账号”找到堆内存中相相应的“现金”,然后才可使用。

     

         不知道讲到这里,读者朋友们理解了值类型和引用类型的差别了吗?尤其是在内存分配方面的差别,这是其本质上的不同。期待与您的交流~

  • 相关阅读:
    WinForm多线程+委托防止界面假死
    网页制作知识库
    HTML Agility Pack:簡單好用的快速 HTML Parser
    .NET 4.0 和 .NET 4.0 Client Profile 区别
    使用OPCNetAPI连接OPCServer
    Win7系统删除微软拼音
    Unity3D脚本18:可视化辅助设置类 Gizmos
    mysql 索引
    重启oracle方法一二三
    php7 安装扩展
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4069974.html
Copyright © 2011-2022 走看看