值类型和引用类型

来源:互联网 发布:淘宝有趣搜索血滴子 编辑:程序博客网 时间:2024/06/03 11:18

学到值类型和引用类型的时候有点小小的惊讶,因为没有想到会涉及到栈和堆的内容,这时候真的感触很深——知识之间都是联系的温故而知新。

先来了解一下栈和堆(百度百科):

 一、堆栈空间分配区别:
          1)栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于     数据结构中的栈;
          2)堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒    是类似于链表。
   二、堆栈缓存方式区别:
          1)栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放;
          2)堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回     收)。所以调用这些对象的速度要相对来得低一些。
   三、堆栈数据结构区别:
          1)堆(数据结构):堆可以被看成是一棵树,如:堆排序;
          2)栈(数据结构):一种先进后出的数据结构。

值类型和引用类型的区别:


值类型和引用类型运行小例子:

  1、值类型是先把p1的值赋给p2,然后再对p2进行赋值最后,这个过程p1的值不改变,只有p2的值改变。

  2、引用类型是把p1的地址赋给p2,然后对p2指向的地址的内容进行修改,p1和p2指向的是同一地址所以p1对         应地址的内容与p2一致。


定义struct结构(值类型):

运行结果如下

定义class类(引用类型)

运行结果如下






1 0