C#基础(6)值类型和引用类型

news2024/9/24 17:19:44

前言

我们先前已经完成了数组相关的学习,今天我们就要来详细介绍一下数据类型了。

引用类型是指变量存储的是对象的引用或地址,而不是实际的数据。在引用类型中,变量存储的是指向对象的指针,通过这个指针可以访问对象的实际数据。当一个引用类型的变量赋值给另一个变量时,实际复制的是引用,而不是对象本身。这意味着修改一个变量的值会影响其他变量,因为它们引用的是同一个对象。常见的引用类型有数组、字符串、对象等。

需要注意的是,不同编程语言对值类型和引用类型的实现方式可能有所不同。在一些语言中,值类型和引用类型可能有不同的语法和特性。但无论怎样,理解和区分值类型和引用类型对于正确理解和使用编程语言非常重要。

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.coloradmin.cn/o/2110471.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电阻负载柜的故障排除方法有哪些?如何解决常见问题?

电阻负载柜是电力系统中的重要设备,主要用于模拟实际负载,对电力设备进行测试和调试。然而,在使用过程中,可能会出现各种故障。以下是一些常见的电阻负载柜故障及其排除方法: 1. 电源无法启动:首先检查电源…

[数据集][目标检测]西红柿成熟度检测数据集VOC+YOLO格式3241张5类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):3241 标注数量(xml文件个数):3241 标注数量(txt文件个数):3241 标注…

Day 8 ~ 9: 队列

队列的原理 定义 定义:限制在两端进行插入操作和删除操作的线性表。 队尾:允许进行存入操作的一端。 对头:允许进行删除操作的一端。 特点 先进先出。 比如:食堂点餐,先进先出,银行叫号,先进先出…

ConfigBus

Config&Bus 构建server端 构建client端 config执行流程 配置git本地库 Server安全连接 Config集成eureka提升可用性 Config client快速检测 动态刷新配置 Bus 配置配置刷新的两种方式 消息通知解析 XXApplicationEvent类型共有属性 AckRemoteApplicationEvent 事件驱动模型…

浅谈SOC片上系统LoRa-STM32WLE5数据安全防御机制

随着物联网设备的普及,数以亿计的设备正在通过无线网络进行通信,传输大量的敏感数据。这种大规模的设备联网带来了便捷性,但也伴随着巨大的安全风险。SoC片上系统通过将无线通信、处理器、存储和安全机制集成在同一个芯片中,为物联…

启动spring boot项目时,第三方jar包扫描不到的问题

讲述一下遇到的问题: 在启动类Application上使用ComponentScan 这个注解来扫描第三方的包,然后就会出现报错。异常就是无法加载本地的bean,但是可以加载到第三方的bean; 了解过spring boot启动流程的都知道,Springboo…

kuka6轴机器人配置外部启动信号(学习记录,可能不对)

文档认为最重要的信号配置 我自己的信号配置(只配红框,输出部分有需要再添加) 外部启动的时序 有个点注意:外部启动后,为了“骗”BCO,需要在main程序的开头写上一段运动指令(走当前位置即可&…

python中的分支语句

注意: 在python中,每一个对象都有一个布尔值, >>>>>> True 或者 False >>>>>> 且只能判断 0 或者 1 举个例子: n % 2 :就是如果结果等于1 才会执行下一句, 所以要判断是偶数…

Kafka【十四】生产者发送消息时的消息分区策略

【1】分区策略 Kafka中Topic是对数据逻辑上的分类,而Partition才是数据真正存储的物理位置。所以在生产数据时,如果只是指定Topic的名称,其实Kafka是不知道将数据发送到哪一个Broker节点的。我们可以在构建数据传递Topic参数的同时&#xff…

GS-SLAM论文阅读笔记--LoopSplat

介绍 这篇文章看标题是解决GS-SLAM回环检测的,GS-SLAM回环检测之前文章很少,但他对于SLAM又很重要,确实值得阅读一番。而且这些作者的学校又是很厉害的。 文章目录 介绍1.背景介绍2.关键内容2.1 Gaussian Splatting SLAM2.2 Gaussian Splat…

C语言之联合体和枚举

目录 前言 一、联合体类型的声明 二、联合体的特点 三、联合体的大小计算 四、联合体的适用场景举例: 五、枚举类型的声明 六、枚举类型的优点 总结 前言 本文主要讲述C语言的两种结构类型:联合体和枚举。 ❤️感谢支持,点赞关注不迷路❤️ 一…

计算polydata相交

使用vtk.vtkBooleanOperationPolyDataFilter() 可以进行求交,差,并操作 并且可以填充交面,不会形成一个缺口 vtkBooleanOperationPolyDataFilter 计算由两个输入表面定义的体积计算出的并集、交集或差集的边界。 这两个表面不需要是流形的…

六,Spring Boot 容器中 Lombok 插件的详细使用,简化配置,提高开发效率

六,Spring Boot 容器中 Lombok 插件的详细使用,简化配置,提高开发效率 文章目录 六,Spring Boot 容器中 Lombok 插件的详细使用,简化配置,提高开发效率1. Lombok 介绍2. Lombok 常用注解2.1 ToString2.2 Se…

数字经济时代,零售企业如何实现以消费者为中心的数字化转型?

在数字经济时代,零售企业正面临着前所未有的挑战与机遇。随着消费者行为的数字化和多样化,传统的零售模式已难以满足市场需求。为了在激烈的市场竞争中立于不败之地,零售企业必须实现以消费者为中心的数字化转型。这一转型不仅仅是技术的升级…

[ios]准备好app后使用xcode发布ios操作

在app代码完成后,点击xcode进行发布

嵌入式开发学习路线(25届校招学习) 嵌入式学习路线七年规划:从大一小白到校招大佬 (学习路线汇总)

嵌入式开发学习路线(25届校招可以参考) 嵌入式系统作为当前最热门且最有发展前途的IT应用领域之一,吸引了大量有志于从事该行业的学习者。为了系统地掌握嵌入式开发技能,以下是一条详细的学习路线,旨在帮助初学者逐步…

算法:图片压缩算法【Z字行扫描】(Java实现)

要在Java中实现Z字形扫描,我们需要遍历一个给定的nn矩阵,并按照Z字形的顺序输出其元素。Z字形扫描的路径通常是从矩阵的左上角开始,沿着对角线方向交替向下和向上移动,直到遍历完整个矩阵。 下面是一个简单的Java实现示例&#xf…

不同vlan之间的通信方法

1.通过路由器的物理接口 1.给PC1,PC2配置IP地址,网关2.进入交换机配置vlan,交换机所有口都配置access口并绑定vlan3.配置路由器,进入路由器的两个接口配置网关IP和掩码缺点:成本高,每增加一个vlan就需要一个物理端口和…

【项目管理】项目管理办公室 --- PMO

项目管理办公室 PROJECT MANAGEMENT OFFICE 简称PMO 项目管理办公室Project Management Office,简称PMO 是现代企业管理中一个至关重要的组成部分,特别是在那些依赖项目驱动战略的企业中。 PMO的设立旨在提升项目管理的专业性和一致性,通过…

ctfshow-文件包含(web78-web88/web116-web117)

web78 <?phpif(isset($_GET[file])){$file $_GET[file];include($file); }else{highlight_file(__FILE__); } 判断是否存在file参数 如果存在 将包含这个参数值 文件 php://filter可以获取指定文件源码。当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执…