(一)值类型:
1、值类型在栈中分配空间,由系统自动分配;
2、值类型互相赋值后,独立地使用各自的存储空间,操作两个不同的数据;
(二)引用类型:
1、引用类型在堆中分配空间,由new分配;
2、string是特殊的引用类型;
3、引用类型互相赋值后,使用同一个空间数据,会互相影响;
装箱:将值类型转换为引用类型的过程,是隐式的。
拆箱:将引用类型转换为值类型的过程,是显式的。
Heap是堆,空间由手动操作分配和释放,存储区是很大的自由存储区。
Stack是栈,操作系统自动分配和释放,栈上的空间有限。程序在编译期间变量和函数分配内存都在栈上进行,且在运行时、函数调用时的参数的传递也在栈上进行。
using System;
namespace lesson01{
public class Person{
public string name;
}
class MainClass {
public static void Main ( string[] args ) {
//值类型,系统在栈中开辟了空间
int a=5;
int b=a;
b += 1;
Console.WriteLine ("A=" + a);
Console.WriteLine ("B=" + b);
//引用类型,需要使用new手动在堆中开辟空间
Person p1;
Person p2;
p1 = new Person ();
p1.name = "苏利文";
p2 = p1;
p2.name = "麦克";
Console.WriteLine ("P1=" + p1.name);
Console.WriteLine ("P2=" + p2.name);
}
}
}
输出:
A=5
B=6
P1=麦克
P2=麦克