gpt4 book ai didi

.net - 字符串不变性

转载 作者:行者123 更新时间:2023-12-04 00:34:10 26 4
gpt4 key购买 nike

字符串不变性是通过语句还是通过语句中的字符串起作用?

比如我理解下面的代码会在堆上分配两个字符串。

string s = "hello ";
s += "world!";

"hello"会一直留在堆上直到垃圾回收;和 s 现在引用“ Hello World !”在堆上。但是,以下行在堆上分配了多少个字符串...1 或 2?另外,是否有工具/方法来验证结果?
string s = "goodbye " + "cruel world!";

最佳答案

编译器对字符串连接有特殊处理,这就是为什么第二个例子只有 字符串。而“实习”意味着即使你运行这条线 20000 次,仍然只有 1 个字符串。

重新测试结果......最简单的方法(在这种情况下)可能是查看反射器:

.method private hidebysig static void Main() cil managed
{
.entrypoint
.maxstack 1
.locals init (
[0] string s)
L_0000: ldstr "goodbye cruel world!"
L_0005: stloc.0
L_0006: ldloc.0
L_0007: call void [mscorlib]System.Console::WriteLine(string)
L_000c: ret
}

如您所见( ldstr ),编译器已经为您完成了这项工作。

关于.net - 字符串不变性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/372354/

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