C#数据类型分为两类:值类型,引用类型。
值类型直接存储其值,引用类型存储对值的引用,值类型存在堆栈(即栈)上,引用类型存储在托管堆(即堆)上,值类型转为引用类型叫做装箱,引用类型转为值类型叫拆箱。
集体参考:http:/www.cnblogs.com/John-Connor/archive/2012/04/13/2443765.html(很重要,必看!!!!!)
1.值类型:简单类型,结构类型,枚举类型。
简单类型:
整形:sbyte,short,int,long,byte,ushort,uint,ulong.
浮点型:float,double,decimail
布尔类型:bool
char类型:char
结构类型:struct(struct和类相似,但是没有继承)
2.引用类型:类,对象,字符串
例子:假设我们有个Member 类,字段有Name和Num:
Member member1 = new Member { Name = "Marry", Num = "001" }; Member member2 = member1; member1.Name = "John"; Console.WriteLine("member1.Name={0} member2.Name={1}",member1.Name,member2.Name); int i = 1; object o = i; object o2 = o; o = 2; Console.WriteLine("o={0} o2={1}", o, o2); string str1 = "Hello"; string str2 = str1; str1 = "Hello,World!"; Console.WriteLine("str1={0} str2={1}", str1, str2); Console.ReadKey();
结果:member1.Name=John member2.Name=John
o=2 o2=1 以及str1=Hello,World! str2=Hello
原因:object,string 重新赋值的时候,堆会重新分配一个对象。
根本原因:运算符重载。=重载:重新在堆中复制一个对象,并将新的引用赋值给改变的值。