gpt4 book ai didi

c# - 为什么只有字符串是不可变的而不是其他数据类型

转载 作者:行者123 更新时间:2023-11-30 12:45:12 30 4
gpt4 key购买 nike

我总是想知道什么时候涉及到可变性。为什么 .net 设计者只开发了 stringbuilder 类来实现字符串类的可变性而不是 intbuilder 考虑到 int 和 string 的实现方式完全相同,无论它们的数据类型如何。

最佳答案

许多其他语言为字符串提供了类似的设计:Java with StringBufferStringBuilder , 斯卡拉 StringBuilder , 带有 MutableString 的 Python though there are other, beter solutions in Python .在 C++ 中,字符串是可变的,因此不需要构建器。

string存在builder的原因是:

  1. 许多语言将字符串定义为不可变的(任何更改都需要内存中的新对象)
  2. 字符串往往很大,比整数大得多
  3. [1] 和 [2] 共同导致效率低下

builder不存在int的原因:

  1. 本身就是简单的数据结构
  2. 大多数 CPU 都有优化的指令来处理简单的数字(加、减等)
  3. 大多数 CPU 使用寄存器或快速 CPU 缓存可以在一个或几个周期内高效地处理 [2] 条指令
  4. [2] 和 [3] 相结合消除了优化的需要
  5. 几乎不需要改变 int 本身,但是,如果需要,可以使用 BitConverterbinary shift operations

关于c# - 为什么只有字符串是不可变的而不是其他数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25605494/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com