|
|
1
14
听起来像 string interning -一种只存储字符串一个副本的方法。它要求字符串在您处理的语言中是不可变类型,并且。Net满足了这一点,并使用了字符串接口。 在字符串内部,字符串“xyz”存储在内部池中,每当您在内部说“xyz“时,它都会引用池中的条目。这可以通过只存储一次字符串来节省空间。因此,对“xyz”==“xyz“的比较将被解释为[指向34576的指针]==[指向34576],这是真的。 |
|
|
2
6
这肯定是由于字符串实习。哈希码是
从不
在与参考进行比较时计算
根据C#规范,第2.4.4.5节:
注意这个字符串 常量表达式 在这种情况下计为文字,因此:
这是有保证的
顺便说一句,当规范中说“程序”时,它实际上意味着“组装”。不同程序集中相等字符串的行为取决于以下因素
|
|
|
3
4
程序集中的任何字符串文字只存在一次。编译器对所有出现的字符串文字“xyz”使用相同的常量字符串。由于字符串是不可变的(您永远无法更改字符串实例的值),编译器可以安全地将同一字符串实例用于单独的字符串引用。 如果你在运行时创建一个字符串,你会得到一个单独的实例:
输出:
|
|
|
4
0
完全同意 Tom's answer ... 摘录自 CIL Specification (第126页) :
|
|
|
5
0
字符串实习与此无关。 如果发现这一点,我会非常惊讶。NET/C#编译器隐式调用Intern,在运行时检查匹配字符串对CPU来说压力太大。 |
|
Ben · 统计向量中的单词在字符串中出现的频率 1 年前 |
|
|
bear_525 · 从列中删除中间名和首字母,并保存在单独的列中 1 年前 |
|
|
asdfadf · 为什么具有相同内存值的字符串和整数打印方式不同? 1 年前 |
|
|
user764754 · 防止多行原始字符串文字中出现新行字符 1 年前 |
|
|
Bogaso · 从列表中返回与模式匹配的元素 1 年前 |
|
|
Jasco · 如何使用VBA提取两个相似字符之间的字符串中的单词? 1 年前 |