一. 值类型和引用类型
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}");