相信很多人面试的时候都被问到过,大家那心里都很清楚他们的区别。但是当我们想以一种比较官方话讲出来时觉得一时,不知道从何说起。所以今天刚辞职的我想简单谈谈我的看法。
在作者查阅了大量资料后,我并没有在计算机基础中查找到关于这两种说法的定义(有找的兄弟可以告诉我,我去补补缺),我比较的接受的资料是以C#语言为例的说法。下面进入正文:
In C#, these data types are categorized based on how they store their value in the memory. C# includes following categories of data types:
1.Value type
2.Reference type
3.Pointer type
从上面的资料中我们可以很得出一个重要结论:
值类型和引用类型的划分是依据是:在内存中的存储方式不同.
咱们分别来看这两种类型的存储究竟有何不同
1.值类型
当我们声明一个数据类型并且在他内存中有值,也就是说这个值直接包括在他声明的内存中。举个简单的:
int i = 0
它在计算机中的存储方式如下:
从上图中我们可以很清楚的看出,整数100就存储在i指向的内存(0x239110)中。
2.引用类型
对比值类型说,引用类型并不是直接数据类型的值,而是保存其值所在的内存地址
同样来个:
string s = "Hello World!!";
这个图我就不做说明,大家对比值类型保存的图,应该很明显可以看出两者的区别。
为了方便大家理解。给大家举个生活中常见的类似场景:
想象一下我们带着包(变量)去超市,到了超市我们有两种方式处理这个包:
1.放在身上(直接存储到内存中,用时直接取)
2.存在储物柜,自己拿着凭条(保存变量地址,按照地址取变量)
以上是以C#语言为例关于两种类型的说明,还要有一点关于自己的理解。希望能帮到需要的同志。
写在最后:
关于内存操作没有简单的事,值类型和引用类型放开了讲会是一件极其复杂的事情,牵涉到的东西太多。比如:两种类型的存储区域在哪?引用类型的值是怎么查找?... 在下知识浅薄,见识短浅,实在不敢妄谈。大家有高见或者有更深刻理解的欢迎留言。
Value Type and Reference Type