string.Empty 与 "" 的区别

yidichaxiang 2009-09-17 05:33:50
string.Empty 与 "" 有啥区别?

在使用中
定义 string 类型的 变量 strName
并附值

strName.Trim().Equals(string.Empty)

strName.Trim().Equals("")

有啥区别

当strName 为空字符串时 Equals 与 == 有差异吗?
...全文
255 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
红街咖啡 2009-09-17
  • 打赏
  • 举报
回复
有没有分配内存的区别。
phommy 2009-09-17
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 abcdwxc 的回复:]
string.Empty 不分配存储空间
"" 分配一个长度为空的存储空间
[/Quote]

并非“长度为空”。考查代码
string s="";
为了存储"",需要在堆上分配3个字节,分别是两个0和""它在内存中的位置,即s.m_firstChar、s.m_arrayLength和s.m_stringLength
另外,还在堆栈上分配了1个字节,存放变量s本身

那篇文章说Length比较最节省时间也是不对的,可以用Reflect出源代码看到,两者在效率上是相同的

private static unsafe bool EqualsHelper(string strA, string strB)
{
int length = strA.Length;
if (length != strB.Length)
{
return false;
}
...
yudeli 2009-09-17
  • 打赏
  • 举报
回复
string.Empty是一个Static的属性,使用时不分配存储空间,而在用""时,系统会分配一个长度为空的存储空间。不过编译系统应该会优化,也就是说,比如你程序中有10个地方用到了"",但好的编译系统应该引用的是同一个对象。所以用""也就是浪费一个对象空间而已。
「已注销」 2009-09-17
  • 打赏
  • 举报
回复
你用""的时候有可能会因为笔误打成" ";
但是用string.Empty就不会存在这个问题.
abcdwxc 2009-09-17
  • 打赏
  • 举报
回复
string.Empty 不分配存储空间
"" 分配一个长度为空的存储空间
LutzMark 2009-09-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lcl_data 的回复:]
理论上讲:
string.Empty是一个Static的属性,使用时不分配存储空间,而在用""时,系统会分配一个长度为空的存储空间。不过编译系统应该会优化,也就是说,比如你程序中有10个地方用到了"",但好的编译系统应该引用的是同一个对象。所以用""也就是浪费一个对象空间而已。

[/Quote]

up 开发时优先使用String.Empty代替""

xuenzhen123 2009-09-17
  • 打赏
  • 举报
回复
string.Empty不分配存储空间
""分配一个长度为空的存储空间
所以一般用string.Empty

为了以后跨平台,还是用string.empty

在 C# 中,大多数情况下 "" 和 string.Empty 可以互换使用。比如:

string s = "";
string s2 = string.Empty;

if (s == string.Empty) {
//
}
if语句成立


判定为空字符串的几种写法,按照性能从高到低的顺序是:

s.Length == 0 优于 s == string.Empty 优于 s == ""

LutzMark 2009-09-17
  • 打赏
  • 举报
回复
string.Empty的好处是可以跨平台
十八道胡同 2009-09-17
  • 打赏
  • 举报
回复
理论上讲:
string.Empty是一个Static的属性,使用时不分配存储空间,而在用""时,系统会分配一个长度为空的存储空间。不过编译系统应该会优化,也就是说,比如你程序中有10个地方用到了"",但好的编译系统应该引用的是同一个对象。所以用""也就是浪费一个对象空间而已。
souperstar 2009-09-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 crazysox 的回复:]
string.Empty 不分配存储空间
  "" 分配一个长度为空的存储空间

[/Quote]

UP~~
十八道胡同 2009-09-17
  • 打赏
  • 举报
回复
这里有篇文章就说这个
HooverHuang 2009-09-17
  • 打赏
  • 举报
回复
Equals用于数据对象之间的比较,而“==” 用于值的比较。
crazysox 2009-09-17
  • 打赏
  • 举报
回复
string.Empty 不分配存储空间
"" 分配一个长度为空的存储空间

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧