gpt4 book ai didi

c# - C# 中字符串的赋值和创建实例有什么区别?

转载 作者:太空狗 更新时间:2023-10-30 00:20:00 26 4
gpt4 key购买 nike

我有示例代码。

var charMass = new char[] { 's', 't', 'r' };
string myString = new string(charMass);
string myString2 = new string(charMass);
string myString3 = "str";
string myString4 = "str";

bool bb1 = Object.ReferenceEquals(myString, myString2);
bool bb2 = Object.ReferenceEquals(myString, myString3);
bool bb3 = Object.ReferenceEquals(myString3, myString4);

为什么 bb1 和 bb2 是假的?我知道 equals 必须显示 true,因为它比较值,但是这些字符串的内存分配呢?为什么 myString3 和 myString4 指向堆中的同一 block 内存,而 myString 和 myString2 不是?

最佳答案

C# 编译器对其进行优化,使相同的文字指向相同的字符串实例

MSDN :

The intern pool conserves string storage. If you assign a literal string constant to several variables, each variable is set to reference the same constant in the intern pool instead of referencing several different instances of String that have identical values.

关于c# - C# 中字符串的赋值和创建实例有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14999429/

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