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

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.dtcms.com/a/333289.html

相关文章:

  • Vue模板引用(Template Refs)全解析1
  • ​​数字化时代的身份安全基石:4A平台如何重构企业访问控制体系​
  • excel中批量写sql时,选中日期列由数字转yyyy-mm-dd
  • es7.x中分片和节点关系以及查看节点数
  • Flink中基于时间的合流--双流联结(join)
  • MySQL(多表查询练习)
  • C++宏展开规则
  • 【数据可视化-90】2023 年城镇居民人均收入可视化分析:Python + pyecharts打造炫酷暗黑主题大屏
  • PyTorch 训练神经网络模型,并集成到springboot项目中
  • JavaScript 原型机制详解:从概念到实战(附个人学习方法)
  • 科普:Pygame 中,`pg.Surface` v.s. `screen`
  • 使用Docker容器化Python测试Pytest项目并配置GitHub Actions CI/CD流程
  • IgH初始化--未接从站
  • 一站式学会——进制转换与位运算符详解(通俗易懂)
  • ElasticSearch不同环境同步索引数据
  • 20250815在荣品RD-RK3588-MID开发板的Android13下调通TP芯片FT8206
  • linux安装docker-compose
  • STM32在使用DMA发送和接收时的模式区别
  • 使用C# 高效实现 Word 文档内容查找与替换的6种方法
  • Java 调用 Python 脚本:实现 HelloWorld
  • 数据驱动测试提升自动化效率
  • 车辆减振器异响测试系统
  • [Pyro] 基础构件 | 随机性sample | 可学习参数param | 批量处理plate
  • find命令解读
  • 重塑工业设备制造格局:明远智睿 T113-i 的破局之道
  • 2025北京世界机器人大会:技术、场景、生态实现三重跃迁
  • ARM+OpenPLC 组合详解及经典示例
  • MySQL → SQL → DDL → 表操作 → 数据类型 知识链整理成一份系统的内容
  • 基于 ArcFace/ArcMargin 损失函数的深度特征学习高性能人脸识别解决方案
  • pandas中df.to _dict(orient=‘records‘)方法的作用和场景说明