C#基础(6)值类型和引用类型
前言
我们先前已经完成了数组相关的学习,今天我们就要来详细介绍一下数据类型了。
引用类型是指变量存储的是对象的引用或地址,而不是实际的数据。在引用类型中,变量存储的是指向对象的指针,通过这个指针可以访问对象的实际数据。当一个引用类型的变量赋值给另一个变量时,实际复制的是引用,而不是对象本身。这意味着修改一个变量的值会影响其他变量,因为它们引用的是同一个对象。常见的引用类型有数组、字符串、对象等。
需要注意的是,不同编程语言对值类型和引用类型的实现方式可能有所不同。在一些语言中,值类型和引用类型可能有不同的语法和特性。但无论怎样,理解和区分值类型和引用类型对于正确理解和使用编程语言非常重要。
C#相关的面试中,也会有提及这两个概念的划分。
分下类
引用类型:string,数组,类(还没学到)
值类型:除了以上三个都是(包括结构体【没学】)
区别
例子1: 引用类型 - 数组
// 创建一个引用类型数组
string[] names = new string[3];
// 修改数组中的元素
names[0] = "Alice";
names[1] = "Bob";
names[2] = "Charlie";
// 将数组赋值给另一个引用
string[] otherNames = names;
// 修改另一个数组中的元素
otherNames[0] = "Dave";
// 打印原始数组中的第一个元素
Console.WriteLine(names[0]); // 输出: "Dave"
在这个例子中,names
和otherNames
都是引用类型数组,它们引用了相同的内存地址,指向同一个数组。因此,当修改otherNames
中的元素时,实际上也会修改names
中的元素。
例子2: 值类型
// 创建一个值类型变量
int x = 5;
// 将变量赋值给另一个变量
int y = x;
// 修改另一个变量的值
y = 10;
// 打印原始变量的值
Console.WriteLine(x); // 输出: 5
在这个例子中,x
是一个值类型变量,它在内存中有自己的存储空间。当将x
赋值给y
时,实际上是将x
的值复制给y
。因此,当修改y
的值时,不会影响x
的值。
可以看到,引用类型的值更改的话是会影响引用值的
值类型:在相互赋值时,把内容拷贝给对方,它变我也不变
引用类型:在相互赋值时,是让两者指向同一个值,它变我也变
为什么会有上述区别
你肯定有疑问,为什么会是这样的呢?
其实是因为二者内存区域是不同的,所以存储方式也是不同的
值类型存储在栈空间,这是系统分配的地方,会自动回收,有小而快的特点。
引用类型存储在堆空间,需要我们操作者手动申请和手动释放,他很大,但是运行起来不快。
可能这样说你还是觉得很抽象。
那我们来画个图吧。
例子存储的展示
这里可以看到,值类型是直接指向的数据,而引用类型是指向地址后再指向数据,我们也就能明白为什么,我们修改引用类型的值会波及到本身了,是因为虽然他们的地址没变,但是他们指向位置的元素一起变了。
总结
我想通过这张图,你应该已经明白引用类型和值类型的区别了。
内容比较简单。
还是那句话,戒骄戒躁,学习要脚踏实地。
请期待我下一篇博客。