关于 C# 字符串的问题:不变性和克隆

2023-12-25

我正在阅读 Accelerated C# 2010。并且有几个问题

问题1

String 的实例是不可变的 一旦你创造了它们, 你无法改变它们

这是真的吗?我已经有一段时间没有使用 C# 了,而且我才刚刚开始,所以我什至在语法上也可能是错误的。

string str1 = "this is a string"; // i hope my syntax is right 
str1 = "this is a NEW string"; // i think i can do this right? 

问题2

如果你调用ICloneable.Clone 字符串上的方法,你会得到一个 指向相同的实例 字符串数据作为源。实际上, ICloneable.Clone 只是返回一个 参考这个

如果这是真的,那就意味着

string str1 = "string 1";
// i hope my syntax is right too. i am really not sure about this
string str2 = str1.Clone(); 
str2 = "modified string"; // will str1 be modified too? 

string str1 = "this is a string"; // i hope my syntax is right 
str1 = "this is a NEW string"; // i think i can do this right? 

Sure! string是一个引用类型(apointer,如果你想这样看),所以在第 2 行,你正在制作变量str1指向一个不同的内存中的(常量)字符串。原始字符串没有改变,只是不再被引用。

string str1 = "string 1";
string str2 = str1.Clone(); // i hope my syntax is right too. i am really not sure about this
str2 = "modified string"; // will str1 be modified too? 

不,因为你没有修改"string 1"。第 2 行之后,它看起来像这样:

memory            "string 1"
                    ^    ^ 
                    |    |
stack             str1  str2

第 3 行之后,看起来像这样:

memory            "string 1"     "modified string"
                      ^              ^
                      |              |
stack                str1           str2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于 C# 字符串的问题:不变性和克隆 的相关文章

随机推荐

  • Android Studio 4.1.1 macOS 全屏错误

    将 Mac 更新到 Big Sur 后遇到问题11 0 1 所有插页式对话框窗口 设备管理器 首选项 SDK 选项等都不会在全屏模式下作为插页式 对话框打开 而是作为应用程序内的选项卡打开 然后 Android Studio 冻结并且没有响
  • 是否可以在 Rust 中使用运行时确定大小的堆栈分配数组?

    是否有相当于alloca在 Rust 中创建可变长度数组 我正在寻找与以下 C99 代码等效的内容 void go int n int array n 这不可能directly 因为支持它的语言中没有直接语法 话虽这么说 C99 的这个特殊
  • 我们可以在 K8S 的 POD 中执行容器吗?

    我正在将 docker 镜像放入 POD 中 我们可以使用 docker exec 执行 Docker 容器 同样 有没有办法在 POD 中执行容器来检查一些数据 有多种方法可以进入 Pod 中的 Kubernetes 容器 kubectl
  • Python:self 与 type(self) 以及类变量的正确使用

    当在Python中使用类变量时 可以通过 self 感谢引用 或 type self 直接 访问和 如果它是可变的 直接操作它 而不可变变量 例如整数 显然可以得到当您只使用 self 时 会被新实例对象遮蔽 那么 在处理 Python 类
  • GDB 找不到行号,而 objdump 可以

    我正在使用 DDD GDB 调试在 NintendoDS 上运行的自制游戏 该游戏使用 arm eabi gcc devkitARM release 32 4 5 1 构建 仅供参考 我上传了未剥离的 elf 二进制文件 文件不再托管 以防
  • 圆弧碰撞检测

    那么如何实现圆弧的碰撞检测呢 我是否必须使用 Box 2d 碰撞 或者我可以使用 Rectangle 或类似的东西以其他方式进行操作吗 顺便说一句 我讨厌 box2d 因为我不理解其中的大部分内容 所以如果有一个排除 box2d 的解决方案
  • Perl 脚本与单行脚本 - 正则表达式的功能差异

    我有一个 Perl 程序 它采用 STDIN 从另一个 bash 命令通过管道传输 bash 命令的输出相当大 大约有 200 行 我想采取entire输入 多行 并将其提供给单行 perl 脚本 但到目前为止我尝试过的任何方法都不起作用
  • ModuleNotFoundError:没有名为“google.appengine”的模块

    我想在 Windows 上用 python3 进行谷歌搜索 谷歌说明说他们支持 python3 并输入 gcloud topic init 以获取详细信息 但没有说没有 python2 7 的解释器 我是否必须安装 python2 7 才能
  • 如何在 Android O 中设置 Firebase 通知 ChannelID?

    对于 API 级别 26 我们必须设置一个通道 id 作为参考 我学会了如何在没有 ChannelID 的情况下做到这一点 下面是我的 Firebase 消息传递设置代码 但现在对于新的 Android api 26 级别 Notifica
  • f:convertDateTime 支持 Java8 LocalDate / LocalDateTime? [复制]

    这个问题在这里已经有答案了 JSF 核心标签f 转换日期时间 https docs oracle com javaee 7 javaserver faces 2 2 vdldocs facelets f convertDateTime ht
  • 判断一个数字是否是 scala 中的好数字

    您好 我是 Scala 函数式编程方法的新手 我想在我的函数中输入一个数字并检查它是否是一个好数字 如果一个数字的每个数字都大于该数字右侧的数字之和 则该数字是一个好数字 例如 9620 相当于 2 gt 0 6 gt 2 0 9 gt 6
  • 如何有效去除字符串的一部分

    有一个像 A B C D E F 这样的字符串 如何删除 C D 部分并得到像 A B E F 这样的字符串 要么只是将其替换掉 input Replace C D 或者使用上一个问题的解决方案之一 将其从数据结构中删除并将其重新连接在一起
  • 从 Struts2 应用程序中的 FreeMarker 获取模板文本

    我想使用 Freemarker 在 Struts2 应用程序中生成电子邮件 由于我也在使用 Freemarker 来实现我的观点 因此我想 重用 相同的配置 使用 Spring 做同样的事情已经有一个类似的问题 在 Spring 应用程序中
  • Java 包装器到 Perl/Python 代码

    我必须在仅支持 Java 的服务器上部署一些 Web 服务 但其中一些将使用 perl 或 python 完成 我想知道是否可以开发一个 Java 包装器来调用用 perl 或 python 编写的特定代码 因此 我希望所有的 Web 服务
  • 如何减少 GC 期间弱引用的处理时间?

    目前 我面临的问题是我的应用程序偶尔会显示较长的 GC 时间 但所有这些都只是由弱引用处理引起的 所以线程停止时间总是接近弱引用处理时间 所有其他 GC 周期均为 0 0001 秒至 0 200 秒 来自 gc log 重新格式化 1038
  • 如何从初始 LocalDateTime 和 cron 表达式获取下一个 LocalDateTime?

    我有一个初始日期和一个 cron 表达式 我怎样才能找到满足这个 cron 表达式的下一个日期 String cronExpresion LocalDateTime initial LocalDateTime now LocalDateTi
  • React 中的可搜索下拉菜单

    我有以下反应列表
  • 应用程序首次打开时的条件页面显示

    您好 我刚刚开始学习 Angular Angular UI Router 并试图找出如何确定应用程序首次打开的时间 以将用户发送到登录页面或主页 这是我到目前为止所拥有的 codeArtApp config function statePr
  • 无法使用带有 x-www-form-urlencoded 参数的 JSOUP 登录网站

    我如何使用来实现以下请求Jsoup http jsoup org POST 登录 用户 HTTP 1 1主机 url publishedprices co il缓存控制 无缓存 内容类型 application x www form url
  • 关于 C# 字符串的问题:不变性和克隆

    我正在阅读 Accelerated C 2010 并且有几个问题 问题1 String 的实例是不可变的 一旦你创造了它们 你无法改变它们 这是真的吗 我已经有一段时间没有使用 C 了 而且我才刚刚开始 所以我什至在语法上也可能是错误的 s