根据这个答案 https://stackoverflow.com/a/2905422/386869, ""
and string.Empty
略有不同,因为""
创建一个对象,而string.Empty
才不是。该答案在该问题上得票最多。
然而,这个答案 https://stackoverflow.com/a/2905391/386869说没有区别。这也是最近的答案。
那是2010年的事了。真的是这样吗?做string.Empty
and ""
完全不同,甚至略有不同?
编辑:这个问题是对链接问题的更新,因为我发现令人困惑的是,尽管对此事进行了一些辩论,但没有提出现代答案。
语言规范(C# 4.0)实际上没有提及这个主题。
根据 CLR via C#,它完全取决于 CLR,而不取决于 C# 编译器。 p. 的相关引用。 341:
即使程序集指定了此属性/标志 [CompilationRelaxations.NoStringInterning],CLR 也可能会选择暂存字符串,但您不应指望这一点。事实上,你真的不应该编写依赖于字符串实习的代码,除非你自己编写了显式调用 String 的 Intern 方法的代码。
所以使用""
可能会也可能不会创建新的字符串对象。这取决于所使用的 CLR(版本)。而且编译器也有可能折叠常量,在这种情况下""
每个 assemble 编译单元将花费 1 个对象,而不是每次出现。
这些对内存使用或速度都没有任何相关影响,但明确的指导方针应该是ReferenceEquals(s1, "")
and ReferenceEquals(s1, String.Empty)
应该避免。
而且当然Object.Equals(s1, s2)
and s1 == s2
在琴弦上总是表现良好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)