关于 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# 字符串的问题:不变性和克隆 的相关文章

  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • 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