当前位置: 首页 > 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.lryc.cn/news/621985.html

相关文章:

  • KNN算法:从电影分类到鸢尾花识别
  • 标准电子邮件地址格式(RFC 5322 里的 mailbox 语法)
  • 机器学习之PCA降维
  • 大模型系列——从训练到推理:网页数据在大语言模型中的新角色
  • Autosar之CanNm模块
  • ScanNet项目介绍
  • Rust 入门 泛型和特征-深入特征 (十五)
  • 从“写代码”到“定义需求”:AI编程工具如何重构软件开发的核心流程?
  • 【Mysql语句练习】
  • PCA降维全解析:从原理到实战
  • epoll发数据学习
  • Flink中的处理函数
  • 【完整源码+数据集+部署教程】小鼠行为识别系统源码和数据集:改进yolo11-RFAConv
  • JavaScript 原型机制详解:从概念到实战(附个人学习方法)
  • Flink中基于时间的合流--双流联结(join)
  • Java集合Map与Stream流:Map实现类特点、遍历方式、Stream流操作及Collections工具类方法
  • Transformer实战(11)——从零开始构建GPT模型
  • 【入门级-算法-6、排序算法:排序的基本概念冒泡排序】
  • 【100页PPT】数字化转型某著名企业集团信息化顶层规划方案(附下载方式)
  • Redis入门和简介
  • LeetCode 刷题【42. 接雨水】
  • 基于51单片机声控灯设计 智能声音+光线控制 楼道灯 声控开关
  • RabbitMQ面试精讲 Day 23:分布式事务与可靠投递
  • 【Redis】分布式系统的演化过程
  • [Oracle数据库] Oracle 常用函数
  • 接口芯片断电高阻态特性研究与应用分析
  • 基于 ArcFace/ArcMargin 损失函数的深度特征学习高性能人脸识别解决方案
  • 解释器模式C++
  • EN 61547照明产品的电磁兼容抗干扰标准
  • 图数据库如何构筑 Web3 风控防线 聚焦批量注册与链上盗转 悦数图数据库