值类型:int float double char int bool byte short long enum
struct decimal
引用类型:string 类 object FileStream interface 委托\数组
栈:连续的
堆:不连续的
int n =10;在栈分配了内存地址为10,在地址起来别名为n
double d = 8; 在栈划分内存地址为8
string s= "12345";在栈划分内存地址,不是"12345",
引用类型在堆里分配"12345",编译成内存地址到栈
int x = n;值类型又拷贝了一份内存
string x1= s;引用类型不在堆上分配新地址,栈地址不同
值类型继承valueType
值类型拷贝的是副本
int i = 10; - >存储在栈内
Person p = new Person();//i,p会编译内地址的数字,直接使用地址而非
变量名,栈内存储的是地址而非变量名
//4个方法
static void Change(int x)
{
x = x + 1;
}
static void Change(string msg)
{
//字符串的不可变性。
msg = msg + " World";
}
static void Change(int[] arr)
{
//这个是真正的把传递进来的arr数组中的内容给改变了。
for (int i = 0; i < arr.Length; i++)
{
arr[i] = arr[i] * 2;
}
}
string str = "hello";
Change(str);
Console.WriteLine(str); //hello str的指向内容未发生改变
int n = 10;
Change(n);
Console.WriteLine(n); //n是几? → 10
//数组是一个引用类型
int[] arrInt = new int[] { 1, 2, 3, 4, 5 };
Change(arrInt);
for (int i = 0; i < arrInt.Length; i++)
{
Console.Write(arrInt[i] + "\t");
}
Console.WriteLine(); //2 4 6 8 10 arrInt的指向内容发生了改变
