关于值类型和引用类型的区别和总结
2009-12-28 16:52
169 查看
关于值类型和引用类型的区别和总结
CLR中支持两种类型:值类型和引用类型。
它们之间有什么区别?
首先我们先类了解什么叫做值类型和引用类型。
值类型(用于存储值)包括:简单类型、结构类型(struct)、枚举类型(enum)
简单类型包括:整数类型、布尔类型、字符类型、实数类型(单精度、双精度、十进制型)
结构类型用来封装小型变量组,枚举
引用类型:变量存的不是值,而是指向所要存储的值的地址。引用类型的变量又称为对象:类、口、委托、数组。
其实两者最主要的区别是两者在内存中的分配位置不同。
值类型的实例分配在线程的堆栈上,它的变量直接包含变量的实例,使用的效率比较高
而引用类型的实例重视从托管堆上分配内存的,引用类型的变量通常包含一个指向实例的指针,变量通过该指针来引用实例。
由于两种在内存中分配位置的不同。引用类型的实例是分配在托管堆上,它的生命周期受到垃圾回收器的管理。而值类型直接分配在堆栈上,他的生命周期随堆栈的弹出而结束
值类型变量包含了其实例数据,每个变量保存了其本身的数据拷贝,因此在默认情况下参数的传递不会影响参数本身
引用类型保存的是其数据的引用地址,因此以引用方式进行参数的传递会影响到参数本身,因为两个变量会引用了内存中的同一个地址。
值类型有两种表示装箱与拆箱,引用类型只有一种能够形式装箱
值类型不具有多态性,而引用类型具有多态性
值类型变量进行赋值,其所有的成员的值都被复制,而引用类型变量进行赋值时只是简单复制指向一个引用对象。
唉,这些总结本应平时做的,到了快考试的时候才做,惭愧。。惭愧。。
CLR中支持两种类型:值类型和引用类型。
它们之间有什么区别?
首先我们先类了解什么叫做值类型和引用类型。
值类型(用于存储值)包括:简单类型、结构类型(struct)、枚举类型(enum)
简单类型包括:整数类型、布尔类型、字符类型、实数类型(单精度、双精度、十进制型)
结构类型用来封装小型变量组,枚举
引用类型:变量存的不是值,而是指向所要存储的值的地址。引用类型的变量又称为对象:类、口、委托、数组。
其实两者最主要的区别是两者在内存中的分配位置不同。
值类型的实例分配在线程的堆栈上,它的变量直接包含变量的实例,使用的效率比较高
而引用类型的实例重视从托管堆上分配内存的,引用类型的变量通常包含一个指向实例的指针,变量通过该指针来引用实例。
由于两种在内存中分配位置的不同。引用类型的实例是分配在托管堆上,它的生命周期受到垃圾回收器的管理。而值类型直接分配在堆栈上,他的生命周期随堆栈的弹出而结束
值类型变量包含了其实例数据,每个变量保存了其本身的数据拷贝,因此在默认情况下参数的传递不会影响参数本身
引用类型保存的是其数据的引用地址,因此以引用方式进行参数的传递会影响到参数本身,因为两个变量会引用了内存中的同一个地址。
值类型有两种表示装箱与拆箱,引用类型只有一种能够形式装箱
值类型不具有多态性,而引用类型具有多态性
值类型变量进行赋值,其所有的成员的值都被复制,而引用类型变量进行赋值时只是简单复制指向一个引用对象。
唉,这些总结本应平时做的,到了快考试的时候才做,惭愧。。惭愧。。
相关文章推荐
- 好东西,转载园子的博文。关于值类型和引用类型区别,讲的很清晰
- 关于cout输出类型是指针的总结和区别
- 黑马程序员_总结跳转语句、枚举类型、结构体类型、类以及值类型和引用类型的区别
- 关于java内存泄露的总结--引用的类型:强引用,弱引用,软引用
- 读<<CLR via C#>>总结(3) 值类型和引用类型的区别
- JS关于引用类型的总结
- 小问题总结01-基本数据类型和引用数据类型的区别
- 关于java基础类型与引用类型内存存储问题,以及string.intern()方法(String两种创建方式的区别)
- 关于对象方法的类型总结obj.name 和 obj[name]的区别
- 陷阱~关于引用类型,请不要模棱两可!
- Java 关于强引用,软引用,弱引用和虚引用的区别与用法
- 实际举例C#引用类型和值类型的区别
- 28:值类型和引用类型的区别
- c# 引用类型和值类型区别 (摘)
- 关于类型转换、溢出、移位等操作的小总结
- java基本数据类型传递与引用传递的区别详解
- 值类型与引用类型区别and装箱与拆箱
- C#中值类型和引用类型的区别
- JAVA中char和String/值类型和引用类型的区别
- int的一点事,读《深入C#内存管理来分析值类型&引用类型,装箱&拆箱,堆栈几个概念组合之间的区别》