C# 中的值类型和引用类型的区别

在 C# 中,数据类型可以分为两大类:值类型(Value Types)和引用类型(Reference Types)。这两者在内存管理、赋值行为、以及对象比较等方面有显著的区别。以下是它们的主要区别:

值类型(Value Types)

  1. 存储位置

    • 值类型直接存储在栈(Stack)内存或栈分配的局部变量表中。
    • 结构体(struct)和枚举(enum)也是值类型。
  2. 赋值行为

    • 当值类型变量被赋值给另一个变量时,值会被复制到新的变量中。
    • 因此,对其中一个变量的修改不会影响另一个变量。
  3. 内存分配

    • 值类型的实例总是被分配在栈上,除非它们是类的字段或数组的元素,此时它们可能被分配在堆(Heap)上。
  4. 默认值

    • 值类型有默认值,例如 int 的默认值是 0bool 的默认值是 false
  5. 相等性比较

    • 使用 == 运算符比较两个值类型变量时,比较的是它们的值。

引用类型(Reference Types)

  1. 存储位置

    • 引用类型存储在堆(Heap)内存中。
    • 变量(称为引用)存储的是对象的内存地址(指针)。
  2. 赋值行为

    • 当引用类型变量被赋值给另一个变量时,引用(即内存地址)被复制到新的变量中。
    • 因此,两个变量引用同一个对象,对其中一个变量的修改会影响另一个变量(如果修改的是对象的状态)。
  3. 内存分配

    • 引用类型的实例总是被分配在堆上。
  4. 默认值

    • 引用类型的默认值是 null,表示它们不引用任何对象。
  5. 相等性比较

    • 使用 == 运算符比较两个引用类型变量时,比较的是它们的引用(即内存地址)。
    • 如果要比较对象的内容,通常需要重写 Equals 方法和 GetHashCode 方法,或者使用 Object.Equals(object objA, object objB) 方法。

示例代码

// 值类型示例
int a = 5;
int b = a; // b 是 a 的副本,a 和 b 互不干扰
a = 10;
Console.WriteLine(b); // 输出 5// 引用类型示例
string str1 = "Hello";
string str2 = str1; // str2 引用 str1 的字符串对象
str1 = "World"; // str1 现在引用一个新的字符串对象
Console.WriteLine(str2); // 输出 Hello// 自定义类示例
class MyClass
{public int Value { get; set; }
}MyClass obj1 = new MyClass { Value = 10 };
MyClass obj2 = obj1; // obj2 引用 obj1 的实例
obj1.Value = 20;
Console.WriteLine(obj2.Value); // 输出 20

总结

  • 值类型:直接存储值,存储在栈上,赋值时复制值,比较时比较值。
  • 引用类型:存储引用(内存地址),存储在堆上,赋值时复制引用,比较时比较引用(除非重写 Equals 方法)。

深入理解C#中的装箱与拆箱操作及其性能影响

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/461040.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java项目之基于智能推荐的卫生健康系统(springboot)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的基于智能推荐的卫生健康系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 基于智能推荐…

性能测试详解

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、 性能测试术语解释 1. 响应时间 响应时间即从应用系统发出请求开始,到客户端接收到最后一个字节数据为止所消耗的时间。响应时间按软件的特点…

深度学习基础—循环神经网络(RNN)

引言 从本系列博客开始,我们将来一起学习一下NLP领域的相关基础知识,NLP领域重要的模型是RNN,在此之前,先来了解一些符号的含义。 1.符号定义 (1)符号定义 假设建立一个能够自动识别句中人名位置的序列模型…

【工具变量】自由贸易试验区试点DID数据集(2003-2023年)

数据简介:自由贸易试验区(Free Trade Zone,简称FTZ)是中国ZF在新形势下为了推进GG开放、提高开放型经济水平而采取的重要战略举措。自贸试验区在一国的部分领土内运入任何货物,被认为在关境以外,免于实施惯…

Flask

创建项目 Pycharm专业版 默认文件 Pycharm社区版没有自动创建这几个文件,手动创建即可。 运行 常规功能 debug模式 修改内容自动更新,否则需要重新启动运行项目才生效。 修改host 通网络内其他人可以通过我得ip访问该服务。 修改端口号 空格分隔…

[Wireshark] 使用Wireshark抓包https数据包并显示为明文、配置SSLKEYLOGFILE变量(附下载链接)

前言 wireshark安装包 链接:https://pan.quark.cn/s/febb28f57c01 提取码:fUCQ 链接失效(可能会被官方和谐)可评论或私信我重发 chrome与firefox在访问https网站的时候会将密钥写入这个环境变量SSLKEYLOGFILE中,在wir…

野火鲁班猫4 (RK3588)系统配置

烧写系统 参考文档 : https://doc.embedfire.com/linux/rk3588/quick_start/zh/latest/quick_start/apt/apt.html 先装第一个软件,然后打开第二个软件。点固件,选择Ubuntu最新的固件,这边目前是20240911这个。 我这边直接烧写到…

Servlet 3.0 新特性全解

文章目录 Servlet3.0新特性全解Servlet 3.0 新增特性Servlet3.0的注解Servlet3.0的Web模块支持servlet3.0提供的异步处理提供异步原因实现异步原理配置servlet类成为异步的servlet类具体实现异步监听器改进的ServletAPI(上传文件) Servlet3.0新特性全解 tomcat 7以上的版本都支…

[OceanBase-不止于记录]:揭秘双引擎战略,共探AI时代数据架构未来

前言 又到了一年一度大家最爱的探会文章,非常荣幸收到OceanBase官方的邀请参加2024 OceanBase 年度发布会,作为一个经常参加线下探会的博主,每一次体验都有所不同,每一次新技术的突破都让人感到无比兴奋。同时,作为数…

【论文复现】短期电力负荷

作者主页: 七七的个人主页 文章收录专栏: 论文复现 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 短期电力负荷 论文发表问题背景一. 基本问题二. 本论文发现的问题 对于论文发现问题的解决方案:复现…

Java-I/O框架:FileReader类使用、FileWriter类的使用、字符流复制文件

视频链接:16.19 字符流复制文件_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Tz4y1X7H7?spm_id_from333.788.videopod.episodes&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5&p19 1.FileReader类(文件字符输出流)使用 pac…

快速生成高质量提示词,Image to Prompt 更高效

抖知书老师推荐: 随着 AI 技术的不断发展,视觉信息与语言信息之间的转换变得越来越便捷。在如今的数字化生活中,图像与文字的交互需求愈发旺盛,很多人都希望能轻松将图像内容直接转化为文本描述。今天我们来推荐一款实用的 AI 工…

网安秋招面试

《Java代码审计》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484219&idx1&sn73564e316a4c9794019f15dd6b3ba9f6&chksmc0e47a67f793f371e9f6a4fbc06e7929cb1480b7320fae34c32563307df3a28aca49d1a4addd&scene21#wechat_redirect 《Web安全》h…

Python小游戏14——雷霆战机

首先,你需要确保安装了Pygame库。如果你还没有安装,可以使用pip来安装: bash pip install pygame 代码如下: python import pygame import sys import random # 初始化Pygame pygame.init() # 设置屏幕大小 screen_width 800 scr…

编程之路:蓝桥杯备赛指南

文章目录 一、蓝桥杯的起源与发展二、比赛的目的与意义三、比赛内容与形式四、比赛前的准备五、获奖与激励六、蓝桥杯的影响力七、蓝桥杯比赛注意事项详解使用Dev-C的注意事项 一、蓝桥杯的起源与发展 蓝桥杯全国软件和信息技术专业人才大赛,简称蓝桥杯&#xff0c…

Python3 No module named ‘pymysql‘

在使用python3链接数据库时,总是提示 No module named pymysql 错误,执行pip3 install pymysql后,提示安装成功,但是执行py文件还是提示此错误。 使用python2 执行时,链接数据库正确,百思不得其解 先使用…

SpringBoot调用SOAP接口步骤详解。

1、引入依赖 <dependency><groupId>org.springframework.ws</groupId><artifactId>spring-ws-core</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-oxm</ar…

移远通信闪耀2024香港秋灯展,以丰富的Matter产品及方案推动智能家居产业发展

10月27-30日&#xff0c;2024香港国际秋季灯饰展在香港会议展览中心盛大开展。 作为全球领先的物联网整体解决方案供应商&#xff0c;移远通信再次亮相&#xff0c;并重点展示了旗下支持Matter协议以及亚马逊ACK ( Alexa Connect Kit ) SDK for Matter方案的Wi-Fi模组、低功耗蓝…

【万户软件-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

107. 阴影范围.shadow.camera

上篇文章2.平行光阴影计算讲解过&#xff0c;通过光源的阴影相机属性.shadow.camera,来控制阴影的渲染范围&#xff0c;本节课继续.shadow.camera的讲解。 平行光阴影相机属性.shadow.camera回顾 平行光DirectionalLight的.shadow属性是平行光阴影对象DirectionalLightShadow…