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

C# 中的 string / StringBuilder / 值类型 / 引用类型 / CLR 总结

C# 中的 string / StringBuilder / 值类型 / 引用类型 / CLR 总结

1. String 与 StringBuilder

特性stringStringBuilder
可变性不可变(immutable)可变(mutable)
内存操作每次修改会生成新对象在原对象上直接修改
使用场景字符串较少修改字符串频繁拼接或修改
线程安全是(不可变天然线程安全)否(需手动保证线程安全)

示例

string a = "abc";
a += "def"; // 生成新字符串对象var sb = new StringBuilder("abc");
sb.Append("def"); // 修改原对象

2. 值类型 vs 引用类型

特性值类型引用类型
存储位置栈(stack)或嵌入对象中堆(heap)
赋值行为复制内容复制引用(指向同一对象)
常见类型int, float, structclass, string, 数组, StringBuilder
可空性可用 Nullable<T>可直接为 null

区别要点

  • 值类型赋值:修改副本,不影响原变量。
  • 引用类型赋值:多个变量可能指向同一对象,修改会相互影响。

3. CLR(Common Language Runtime)

  • .NET 运行时环境,负责执行 C# 代码、内存管理和垃圾回收(GC)。
  • 值类型一般分配在栈上,由作用域结束时释放。
  • 引用类型分配在堆上,由 GC 自动回收。
  • string 是引用类型,但不可变,并且 CLR 会对其进行**字符串驻留(interning)**优化。

4. 快速记忆口诀

string 不可变 → 每次修改生成新对象
StringBuilder 可变 → 高效拼接修改
值类型 栈上存 → 复制内容
引用类型 堆上存 → 复制引用
CLR 管内存 → GC 回收引用对象
http://www.xdnf.cn/news/17859.html

相关文章:

  • Design Compiler:使用IC Compiler II Link
  • Tasking编译问题: E207: syntax error - token “<integer>“ delete的解决方案
  • 【机器学习】核心分类及详细介绍
  • 电视同轴电缆全面指南:从基础到应用,批量测量一键计量
  • 【博客系统测试报告】---web界面自动化测试
  • 使用PyTorch实现手写数字识别系统:从理论到实践
  • 附045.Kubernetes_v1.33.2高可用部署架构二
  • 介绍大根堆小根堆
  • C++——分布式
  • 从 0 到 1 玩转Claude code(蓝耘UI界面版本):AI 编程助手的服务器部署与实战指南
  • Unity 绳子插件 ObjRope 使用简记
  • C#文件复制异常深度剖析:解决“未能找到文件“之谜
  • 硬件开发_基于STM32单片机的热水壶系统
  • 领域防腐层(ACL)在遗留系统改造中的落地
  • 疯狂星期四文案网第40天运营日记
  • 分布式锁那些事
  • AI浪潮之巅:解码技术革命、重塑产业生态与构建责任未来
  • 超高车辆碰撞预警系统如何帮助提升城市立交隧道安全?
  • uniApp App 端日志本地存储方案:实现可靠的日志记录功能
  • 【python实用小脚本-187】Python一键批量改PDF文字:拖进来秒出新文件——再也不用Acrobat来回导
  • RH134 管理存储堆栈知识点
  • Day60--图论--94. 城市间货物运输 I(卡码网),95. 城市间货物运输 II(卡码网),96. 城市间货物运输 III(卡码网)
  • StarRocks集群部署
  • 顺丰面试题
  • 最长递增子序列-dp问题+二分优化
  • 金融业务安全增强方案:国密SM4/SM3加密+硬件加密机HSM+动态密钥管理+ShardingSphere加密
  • 【职场】-啥叫诚实
  • es7.x的客户端连接api以及Respository与template的区别
  • 基本电子元件:碳膜电阻器
  • pytorch 数据预处理,加载,训练,可视化流程