5.3 变量、对象与内存 - 图3七种变量:静态变量、实例变量、数组元素、值参数、引用参数、输出形参、局部变量

图片.png
图片.png图片.png
图片.png图片.png

引用类型的变量与实例

  1. Student stu;

计算机看到引用类型,直接给它分配 4 个字节,而且全部 Bit 置 0,告诉你这个变量没有引用任何实例。

  1. Student stu;
  2. stu = new Student();

现在,引用变量里面存的是实例的地址。
图中左侧是栈,右侧是堆。
(内存空间分为栈空间和堆空间,值类型的数据在栈空间中分配,引用类型数据(对象)在堆空间中分配。)
5.3 变量、对象与内存 - 图9

  1. Student stu;
  2. stu = new Student();
  3. Student stu2;
  4. stu2 = stu;

5.3 变量、对象与内存 - 图10

变量的默认值

一旦变量在内存中分配好后,它的内存块就被统统刷成 0,这就是它的默认值。

局部变量没有默认值,因为 C# 为了避免不安全代码,要求局部变量必需有显式赋值。

装箱与拆箱

  1. int a = 100;
  2. object x;

5.3 变量、对象与内存 - 图11

装箱

  1. int a = 100;
  2. object x;
  3. x = a;

5.3 变量、对象与内存 - 图12

拆箱

  1. int a = 100;
  2. object x;
  3. x = a;
  4. int b = (int)x;
  5. Console.WriteLine(b);

5.3 变量、对象与内存 - 图13