当前位置: 首页 > article >正文

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"

在这个例子中,namesotherNames都是引用类型数组,它们引用了相同的内存地址,指向同一个数组。因此,当修改otherNames中的元素时,实际上也会修改names中的元素。

例子2: 值类型

// 创建一个值类型变量
int x = 5;

// 将变量赋值给另一个变量
int y = x;

// 修改另一个变量的值
y = 10;

// 打印原始变量的值
Console.WriteLine(x);  // 输出: 5

在这个例子中,x是一个值类型变量,它在内存中有自己的存储空间。当将x赋值给y时,实际上是将x的值复制给y。因此,当修改y的值时,不会影响x的值。

可以看到,引用类型的值更改的话是会影响引用值的

值类型:在相互赋值时,把内容拷贝给对方,它变我也不变

引用类型:在相互赋值时,是让两者指向同一个值,它变我也变

为什么会有上述区别

你肯定有疑问,为什么会是这样的呢?

其实是因为二者内存区域是不同的,所以存储方式也是不同的

值类型存储在栈空间,这是系统分配的地方,会自动回收,有小而快的特点。

引用类型存储在堆空间,需要我们操作者手动申请和手动释放,他很大,但是运行起来不快。

可能这样说你还是觉得很抽象。

那我们来画个图吧。

例子存储的展示

这里可以看到,值类型是直接指向的数据,而引用类型是指向地址后再指向数据,我们也就能明白为什么,我们修改引用类型的值会波及到本身了,是因为虽然他们的地址没变,但是他们指向位置的元素一起变了。

总结

我想通过这张图,你应该已经明白引用类型和值类型的区别了。

内容比较简单。

还是那句话,戒骄戒躁,学习要脚踏实地。

请期待我下一篇博客。


http://www.kler.cn/news/293913.html

相关文章:

  • 7.统一网关-Gateway
  • 前端跨域问题详解与解决方案指南
  • ArcGIS Pro SDK (十三)地图创作 3 特殊图层
  • 【优化】Nginx 配置页面请求不走缓存 浏览器页面禁用缓存
  • 深入探讨Go语言中的切片与数组操作
  • Mysql在线安全变更工具 gh-ost
  • iOS——持久化
  • adb devices找不到设备
  • 斯坦福UE4 C++课学习补充25:寻路EQS
  • Java入门:07.Java中的面向对象02
  • 【数据结构】排序算法系列——希尔排序(附源码+图解)
  • J.U.C Review - Stream并行计算原理源码分析
  • 基于发布-订阅模型的音视频流分发框架
  • 2024 第十二届重庆国际植保暨新型肥料农药产业博览会
  • 上海大学《2022年836+915自动控制原理真题及答案》 (完整版)
  • GIT:git add命令指定文件夹
  • dubbo 服务消费原理分析之应用级服务发现
  • [论文笔记]Making Large Language Models A Better Foundation For Dense Retrieval
  • 《长得太长也是错?——后端 Long 型 ID 精度丢失的“奇妙”修复之旅》
  • Python精选200Tips:11-20
  • JAVA学习-练习试用Java实现“删除有序数组中的重复项”
  • NLP中文本预处理
  • 反向沙箱-安全上网解决方案
  • [Docker]当下实测可用Docker镜像源
  • 专为游戏行业设计的安全防护盾——游戏盾
  • 企业财税自动化解决方案的安全与合规性保障
  • 完整指南:CNStream流处理多路并发框架适配到NVIDIA Jetson Orin (三) 代码编译、各种问题解决、代码修改
  • 使用Ansible实现高效服务器配置管理的最佳实践
  • el-table使用type=“expand”根据数据条件隐藏展开按钮
  • vue2,vue3基于elementUI的el-table实现复制粘贴功能