一. 值类型和引用类型

1. 前言

(1). 分类

  值类型包括:布尔类型、浮点类型(float、double、decimal、byte)、字符类型(char)、整型(int、long、short等)、枚举(entum)、结构体(struct)。

  引用类型:数组、字符串(string)、类、接口、委托(delegate)。 

(2).内存存储

  值类型数据存放在栈stack中, 引用类型地址存放栈stack中,数据存放在堆heap中。

  值类型变量声明后,不管是否赋值,都会在在栈中分配内存空间。引用类型声明时,只在栈中分配内存,用于存放地址,并没有在堆上分配内存空间。

2.  对象的传递

(1). 将值类型的变量赋值给另一个变量,会执行一次赋值,赋值变量包含的值。

(2). 将引用类型的变量赋值给另一个引用类型变量,它复制的是引用对象的内存地址,在赋值后就会多个变量指向同一个引用对象实例。

代码分享:

 Console.WriteLine("------------------------下面是值类型和引用类型赋值-----------------------------");
                    //值类型赋值
                    int a = 0;
                    int b = a;
                    Console.WriteLine($"默认值: a={a},b={b}");
                    a = 1;
                    Console.WriteLine($"修改a的值后: a={a},b={b}");
                    b = 2;
                    Console.WriteLine($"修改b的值后: a={a},b={b}");

                    //引用类型赋值
                    Student stu1 = new Student();
                    stu1.age = 20;
                    Student stu2 = stu1;
                    Console.WriteLine($"默认值: stu1.age={ stu1.age}, stu2.age={stu2.age}");
                    stu1.age = 30;
                    Console.WriteLine($"修改stu1.age的值后:stu1.age={ stu1.age}, stu2.age={stu2.age}");
                    stu2.age = 40;
                    Console.WriteLine($"修改stu2.age的值后: stu1.age={ stu1.age}, stu2.age={stu2.age}");
View Code

相关文章: