C#string相关

string

string是一个引用类型,其对象值存储在托管堆中。string内部是一个char集合,其长度Length是char字符数组的长度。

string的恒定性(不变性)

字符串是不可变的,任何改变都会产生新的字符串

string的驻留性

CLR提供了字符串驻留

相同的字符串在内存中只分配一次,第二次申请字符串时,找到已经申请过的字符串,会直接返回已有的字符串

字符串驻留原理: •CLR初始化时会在内存中创建一个驻留池,内部其实是一个哈希表,存储被驻留的字符串和其内存地址。 •驻留池是进程级别的,多个AppDomain共享。同时她不受GC控制,生命周期随进程,意思就是不会被GC回收 •当分配字符串时,首先会到驻留池中查找,如找到,则返回已有相同字符串的地址,不会创建新字符串对象。如果没有找到,则创建新的字符串,并把字符串添加到驻留池中。

不是任何字符串都会驻留,只有通过IL指令ldstr创建的字符串才会留用。 那该如何来验证字符串是否驻留呢,string类提供两个静态方法: •String.Intern(string str) 可以主动驻留一个字符串; •String.IsInterned(string str);检测指定字符串是否驻留,如果驻留则返回字符串,否则返回NULL

StringBuilder

StringBuilder不会创建大量的新对象

StringBuilder在追加字符串时,当字符串总长度超过当前设置的容量Capacity,会重新创建一个更大的字符数组。 调用StringBuilder.ToString(),创建新的字符串

在大量的使用字符串连接的时候,使用StringBuilder。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 2019-05-15 7个对初学者非常有用调试和故障排除技巧

    https://www.javacodegeeks.com/2019/05/useful-debugging-troubleshooting-tips.html...

    Albert陈凯
  • 这一次,腾讯用AI让手语“发声”

    ? 5月16日,全球无障碍宣传日之际,腾讯优图实验室宣布攻克AI手语识别技术挑战,联合深圳市信息无障碍研究会发布“优图AI手语翻译机”,致力于通过人工智能技术...

    腾讯技术工程官方号
  • Golang slice 增删改查

    slice名为切片,是Go中的可变长数组,是对底层数组的封装和引用。切片指向一个底层数组,并且包含长度和容量信息。未初始化切片的值为 nil。作用于切片的内建函...

    Dabelv
  • 网易杭州游戏研发实习面经

    在牛客混了一段时间,看了很多大佬的面经,学习了很多,国内面试套路跟美国不大一样,写点东西也回馈下牛友

    牛客网
  • SparseArray 源码解析

    使用 Android Studio 作为 IDE 的开发者可能会遇到一个现象,就是在代码中如果声明了 Map<Integer, Object> 类型的变量的话...

    叶应是叶
  • [WPF自定义控件]从ContentControl开始入门自定义控件

    我去年写过一个在UWP自定义控件的系列博客,大部分的经验都可以用在WPF中(只有一点小区别)。这篇文章的目的是快速入门自定义控件的开发,所以尽量精简了篇幅,更深...

    dino.c
  • Python函数式编程 入门必备

    python 支持函数式编程,提到数式编程,大家首先想到的是多个函数内嵌。的确是这样。不过,要想入门函数式编程,里面涉及到的闭包,是不得不掌握的,换句话说,如果...

    double
  • JS中Object.freeze()与Const之间的区别[每日前端夜话0x6A]

    ES6 自发布以来为 JavaScript 带来了一些新功能和方法。与 JavaScript 相比,这些功能更好地改善了我们的工作流程。这些新功能包括 Obje...

    疯狂的技术宅
  • node应用远程调试教程

    所谓远程调试,是指在本地IDE或命令行即时调试服务端代码,这在预发环境的测试阶段可以使用。远程调试避免了服务端环境的模拟,可快速定位bug。

    欲休
  • 小知识:什么是「欧几里得算法」

    短除法是求最大公因数的一种方法:先把每个数的因数找出来,然后再找出公因数,最后在公因数中找出最大公因数。

    五分钟学算法

扫码关注云+社区

领取腾讯云代金券