本帖最后由 rla540 于 2012-12-14 19:24 编辑
黑马程序员---值类型和引用类型的区别 调试并查看内存 值类型和引用类型最大的区别就是在栈空间中。值类型存放的是自己实实在在的数据。而引用类型存放的是自己真实数据的地址。 在函数中值类型作为传参传递,实际上是传递值类型的一个拷贝,所以在函数中对值类型的拷贝做任何操作都不会影响到值类型变量本身。 而引用类型作为函数参数,实际上传递的是4字节大小的对象实体在堆中的地址值。所以通过地址值间访问和修改对象中的数据。 那么为什么把类作为引用来用?类数据一般都是很大的。而基本数据类型一般比较小。 那么当调用函数时每个函数都会在栈中开辟一块空间来给参数,内部变量等使用,基本数据一般都不大,所以很容易开辟。而类类型一般都是很大的,如果函数调用的次数很多,就要开辟又多又大的空间来给函数使用。这样既浪费内存,又会降低运行效率。用引用作参数就不一样了。只需要开辟4字节空间就可以把这个问题解决掉。省时又省力,哦也! 那么函数参数前加个ref out又是怎么回事?不加时是传递变量的拷贝,加上了,编译器就会自动把变量的地址作为参数使用喽! 存放地址的变量在C C++ 中叫指针,而C#中的引用看来也是一个指针,只不过是一个更安全的指针。以防止我们会犯C, C++中的错误。比如不允许数组越界!数组元素的访问其实就是通过数组首地址,和数据下标进行加减操作完成的!C#中加入了一些限制,这样保证了安全性!
|