两个相同的字符串可以是 C# 中的两个单独的实例吗?

2023-12-28

在 C# 中,字符串是驻留的。也就是说,如果我创建字符串foobar当第二次使用它时,C# 在内存中只会有一个字符串实例,虽然我有两个引用,但它们都将指向同一个字符串实例。这就是 C# 中字符串必须不可变的原因之一。

现在,我的问题是,是否有可能以某种方式创建两个相同的字符串,以便它们不会被保留,但我们最终会在内存中得到两个不同的字符串实例,具有两个不同的地址,并且包含完全相同的文本?

如果是这样,怎么办?

而且,这种情况是否会意外发生,或者您是否需要为这种情况明确构建一个场景?

最后:假设内存中有两个具有相同值的独立字符串实例,它们是否相等(就==)?如果是这样,如何==工作?首先通过引用进行比较,然后通过值进行比较,或者……?


在 C# 中,字符串是驻留的。

否。在 C# 字符串中被允许被拘留。这是一个非常不同的说法。

也就是说,如果我创建字符串 foobar 并第二次使用它,C# 在内存中将只有该字符串的一个实例,尽管我将有两个引用,但它们都将指向同一个字符串实例

不。同样,在 C# 中,运行时是允许的确定一个“foobar”与另一个“foobar”相同并实习它们,但事实并非如此required这样做。

当然,如果您复制引用,那么该引用也会被复制。但是,如果您创建的第二个字符串与之前的字符串看起来相同,则不需要将其保留。

实际上,当字符串是文字时,它们会被保留:

string x = "foobar";
string y = "foobar";
// x is reference equal to y

或者当编译器可以计算出它们相同时:

string x = "foobar";
string y = "foo" + "bar";
// x is reference equal to y

或者当您明确告诉运行时您想要保留特定字符串时。否则,字符串通常不会被保留:

string x = "foobar";
string y = "f" + x.Substring(1); 
// x and y are not reference equal
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

两个相同的字符串可以是 C# 中的两个单独的实例吗? 的相关文章

  • std::cout 和 std::wcout 有什么区别?

    在c 中 有什么区别std cout and std wcout 它们都控制流缓冲区的输出或将内容打印到控制台 或者它们只是相似吗 它们作用于不同的字符类型 std cout uses char作为字符类型 std wcout uses w
  • 使用Physics.Raycast 和Physics2D.Raycast 检测对象上的点击

    我的场景中有一个空的游戏对象 带有 2D 组件盒碰撞器 我将脚本附加到该游戏对象 void OnMouseDown Debug Log clic 但是当我点击我的游戏对象时 没有任何效果 你有什么想法 如何检测我的盒子碰撞器上的点击 使用光
  • Unix网络编程澄清

    我正在翻阅这本经典书籍Unix网络编程 https rads stackoverflow com amzn click com 0139498761 当我偶然发现这个程序时 第 6 8 节 第 179 180 页 include unp h
  • 如何检查QProcess是否正确执行?

    QProcess process sdcompare QString command sdcompare QStringList args sdcompare command sdcompare diff args sdcompare lt
  • 互斥体实现可以互换(独立于线程实现)

    所有互斥体实现最终都会调用相同的基本系统 硬件调用吗 这意味着它们可以互换吗 具体来说 如果我使用 gnu parallel算法 使用openmp 并且我想让他们称之为线程安全的类我可以使用boost mutex用于锁定 或者我必须编写自己
  • 在 Unity 进程和另一个 C# 进程之间进行本地 IPC 的最快方法 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我希望每秒大约 30 次从 C 应用程序向我的 Unity 应用程序传送大量数据 由于 Unity 不支持映射内存和管道 我考虑了 t
  • 获取 WPF 控件的所有附加事件处理程序

    我正在开发一个应用程序 在其中动态分配按钮的事件 现在的问题是 我希望获取按钮单击事件的所有事件 因为我希望删除以前的处理程序 我尝试将事件处理程序设置为 null 如下所示 Button Click null 但是我收到了一个无法分配 n
  • ASP.NET:获取自 1970 年 1 月 1 日以来的毫秒数

    我有一个 ASP NET VB NET 日期 我试图获取自 1970 年 1 月 1 日以来的毫秒数 我尝试在 MSDN 中寻找方法 但找不到任何东西 有谁知道如何做到这一点 从 NET 4 6 开始 该方法ToUnixTimeMillis
  • 使用 JNI 从 Java 代码中检索 String 值的内存泄漏

    我使用 GetStringUTFChars 从使用 JNI 的 java 代码中检索字符串的值 并使用 ReleaseStringUTFChars 释放该字符串 当代码在 JRE 1 4 上运行时 不会出现内存泄漏 但如果相同的代码在 JR
  • Rx 中是否有与 Task.ContinueWith 运算符等效的操作?

    Rx 中是否有与 Task ContinueWith 运算符等效的操作 我正在将 Rx 与 Silverlight 一起使用 我正在使用 FromAsyncPattern 方法进行两个 Web 服务调用 并且我想这样做同步地 var o1
  • Java 不可变对象 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在学习不变性的概念 据我了解 一旦创建对象 不可变对象就无法更改其值 但我不明白不可变对象的以下用途 They are 自动是线程
  • 未经许可更改内存值

    我有一个二维数组 当我第一次打印数组的数据时 日期打印正确 但其他时候 array last i 的数据从 i 0 到 last 1 显然是一个逻辑错误 但我不明白原因 因为我复制并粘贴了 for 语句 那么 C 更改数据吗 I use g
  • 在一个字节中存储 4 个不同的值

    我有一个任务要做 但我不知道从哪里开始 我不期待也绝对不想要代码中的答案 我想要一些关于该怎么做的指导 因为我感到有点失落 将变量打包和解包到一个字节中 您需要在一个字节中存储 4 个不同的值 这些值为 NAME RANGE BITS en
  • .NET中的LinkedList是循环链表吗?

    我需要一个循环链表 所以我想知道是否LinkedList是循环链表吗 每当您想要移动列表中的 下一个 块时 以循环方式使用它的快速解决方案 current current Next current List First 电流在哪里Linke
  • Process.Start() 方法在什么情况下返回 false?

    From MSDN https msdn microsoft com en us library e8zac0ca v vs 110 aspx 返回值 true 表示有新的进程资源 开始了 如果由 FileName 成员指定的进程资源 St
  • 如何在按钮单击时模拟按键 - Unity

    我对 Unity 中的脚本编写非常陌生 我正在尝试创建一个按钮 一旦单击它就需要模拟按下 F 键 要拾取一个项目 这是我当前的代码 在编写此代码之前我浏览了所有统一论坛 但找不到任何有效的东西 Code using System Colle
  • 编译时“strlen()”有效吗?

    有时需要将字符串的长度与常量进行比较 例如 if line length gt 2 Do something 但我试图避免在代码中使用 魔法 常量 通常我使用这样的代码 if line length gt strlen Do somethi
  • 英特尔 Pin 与 C++14

    问题 我有一些关于在 C 14 或其他 C 版本中使用英特尔 Pin 的问题 使用较新版本从较旧的 C 编译代码很少会出现任何问题 但由于 Intel Pin 是操作指令级别的 如果我使用 C 11 或 C 14 编译它 是否会出现任何不良
  • 使用 Scala 在 Apache Spark 中拆分字符串

    我有一个数据集 其中包含以下格式的行 制表符分隔 Title lt t gt Text 现在对于每个单词Text 我想创建一个 Word Title 一对 例如 ABC Hello World gives me Hello ABC Worl
  • 在客户端系统中安装后桌面应用程序无法打开

    我目前正在使用 Visual Studio 2017 和 4 6 1 net 框架 我为桌面应用程序创建了安装文件 安装程序在我的系统中完美安装并运行 问题是安装程序在其他计算机上成功安装 但应用程序无法打开 edit 在客户端系统中下载了

随机推荐

  • 多处理中的Python日志记录:AttributeError:'Logger'对象没有属性'flush'

    基于此code https stackoverflow com a 5916874我创建了一个 python 对象 它既将输出打印到终端 又将输出保存到日志文件 并在其名称后附加日期和时间 import sys import time cl
  • TeamCity MSTest 和 TestList?

    为了自动化单元测试TeamCity我必须在我的中创建一个测试列表vsmdi配置文件表明每个测试都是我调用的列表的一部分CompleteCoverage 我非常不喜欢这个 因为为了自动运行新测试 我必须记住将它们包含在此列表中 有没有办法使用
  • SpecialFolder.ApplicationData 返回默认用户

    我正在尝试获取当前登录用户的应用程序数据文件夹的路径 我在用着 Environment GetFolderPath Environment SpecialFolder ApplicationData 但返回的路径是 C Documents
  • 面向互联网的 SSRS 报告

    我正在使用 PHP 5 2 9 和 MS Sql Server 2005 设计一个网站 我有一个 SSRS 报告 我想对其进行设置 以便互联网上的人们可以访问它 在输入用户名和密码后 但我可以弄清楚那部分 我们的网站托管在本地网络服务器上
  • 从嵌套表单中调用 $builder->getData() 始终返回 NULL

    我试图获取以嵌套形式存储的数据 但是在调用时 builder gt getData 我总是得到NULL 有谁知道如何获取嵌套表单中的数据 这是 ParentFormType php class ParentFormType extends
  • JUnit 5:如何断言抛出异常?

    在 JUnit 5 中是否有更好的方法来断言方法抛出异常 目前 我必须使用 Rule 来验证我的测试是否引发异常 但这不适用于我期望多个方法在测试中引发异常的情况 您可以使用assertThrows https github com jun
  • Jquery Datatables,初始化后更改行回调

    我需要掌握现有数据表的 fnRowCallback 设置 但我尝试的一切似乎都失败了 我尝试过什么 1 var dt table dataTable bRetrieve true fnRowCallback function nRow aD
  • 使用数组下标运算符访问结构成员

    假设有一个类型 T 和一个仅包含 T 类型的统一元素的结构 struct Foo T one T two T three 我想通过以下方式访问它们 struct Foo T one T two T three T operator int
  • 如何使用简单的安装后脚本扩展 distutils?

    安装模块和程序后 我需要运行一个简单的脚本 我在寻找有关如何执行此操作的直接文档时遇到了一些麻烦 看来我需要继承 distutils command install 重写一些方法并将此对象添加到安装脚本中 但具体细节有点模糊 对于这样一个简
  • 更改 Python Matplotlib 中颜色条的颜色

    我有一个代码 可以为我提供预测值与实际值作为浓度函数的散点图 数据是从 Excel csv 电子表格中提取的 这是代码 import matplotlib pyplot as plt from numpy import loadtxt da
  • TSQL 解析带有 4 个分隔符的字符串

    我正在尝试解析这个字符串 200 50 电子邮件受保护 cdn cgi l email protection 09 23 2016 07 00 00 分为 5 栏 我感到很沮丧 分隔符是管道 这些字段不固定 所以我需要使用 charinde
  • Android 2.1 以编程方式卸载 SDCard

    我有一个应用程序 它将重要数据写入 SDCard 并使用 AES 对其进行加密 稍后将由桌面应用程序使用 我注意到 如果我不从 设置 菜单中卸载 SDCard 有时文件根本不会写入 或者已损坏 在 Android 2 1 中是否可以通过编程
  • window.location.href 在 IE 11 中不起作用

    我正在使用 Jquery Ajax 作为登录表单 ajax 成功后 我使用重定向页面window location href test php 这在 Chrome firefox 和 IE9 中工作正常 但在 IE 11 中 它不起作用 我
  • Jetpack compose NavHost 防止重组屏幕

    正如你所看到的 这就是我使用 MaterialBottomNavigation 实现 NavHost 的方式 我在两者上都有很多项目Messages and Feeds屏幕 当我在两个屏幕之间导航时 它们会自动重新组合 但我不想因为那里有太
  • Bootstrap 跨度和列之间有什么区别

    我使用引导程序 但试图理解跨度和列之间的区别 example div class span4 div or div class col md 4 div 他们之间有什么区别或者他们做同样的事情 div class span4 div 是旧的
  • session_start() 有关非法字符、空会话 ID 和失败会话的问题

    所以 我意识到这是一个重复的问题然而 这显然是一个错误 而这篇文章的原始帖子已经有 5 年历史了 但也有人说这是一次恶意攻击 会话 ID 太长或包含非法字符 有效字符为 a z A Z 0 9 和 https stackoverflow c
  • DotNet 核心设置失败

    在我的 Windows 10 笔记本电脑上安装 DotNet Core 时 DotNetCore 1 0 0 RC2 VS2015Tools Preview1 运行时包安装失败 我从安装日志文件中发现了一些错误信息 网络开发工具信息 037
  • 为什么kafka集群中的单节点多broker不是首选?

    我正在尝试将卡夫卡实施到生产中 想知道为什么单节点 多代理的 kafka 实例不是首选 很少有人建议 如果在单个节点上使用多个代理 则应该为它们分配单独的磁盘空间 但这样做的原因尚不清楚 有人可以解释一下单个代理与多个代理 kafka 实例
  • libjpeg 和 .Net jpeg 编解码器在单色数据上真的有很大差异吗?

    我处理大量单色图像数据 今天早上我注意到 libjpeg 和 Net jpeg 编解码器处理单色数据的方式似乎存在显着差异 看起来使用 libjpeg 以任何质量设置保存并使用默认 Net jpeg 编解码器打开的单色图像实际上仅加载 16
  • 两个相同的字符串可以是 C# 中的两个单独的实例吗?

    在 C 中 字符串是驻留的 也就是说 如果我创建字符串foobar当第二次使用它时 C 在内存中只会有一个字符串实例 虽然我有两个引用 但它们都将指向同一个字符串实例 这就是 C 中字符串必须不可变的原因之一 现在 我的问题是 是否有可能以