小弟不才,想问一个问题,实在是对基础知识掌握的不扎实

swalp 2010-10-20 09:02:11

//一个字符串 a
//判断a是否为空,请问哪种方法最快,还请大侠们说一下原理,为什么最快
if(a == "")
{
}

if(Sting.IsNullOrEmpty(a))
{
}

if(a.Length == 0)
{
}
//请问这三种方法,哪种方法执行的最快,为什么?
...全文
259 37 打赏 收藏 转发到动态 举报
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
jblxmn 2010-10-20
  • 打赏
  • 举报
回复
dengjingjian628 2010-10-20
  • 打赏
  • 举报
回复
帮忙顶~!
飞飞无语 2010-10-20
  • 打赏
  • 举报
回复
个人默认用了第二种,感觉比较放心
vrhero 2010-10-20
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 vrhero 的回复:]
ps:至于执行速度的差异,去看看源代码就知道了...但就像你漫长一生中打个喷嚏还是咳嗽一声,其差异根本不值得关注...实际工作中在这里认真无异于书呆子...
[/Quote]
了解?
swalp 2010-10-20
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 vrhero 的回复:]
再ps一下...

a.Length == 0 //若a为null则会引发异常,再快有个P用...
[/Quote]
我也想注明一下,我只是想了解一下执行速度,和原理。并不是非要找哪种方法好。了解?
龍月 2010-10-20
  • 打赏
  • 举报
回复
螃蟹哥, 已经说的很清楚了
所以 我还是 说
没意思
vrhero 2010-10-20
  • 打赏
  • 举报
回复
再ps一下...

a.Length == 0 //若a为null则会引发异常,再快有个P用...
phil999 2010-10-20
  • 打赏
  • 举报
回复
以前看过一个文章,说第三种最快,但是我没有看他的分析,也没有验证过。

楼主可以写个测试,每种方法循环几亿次,比比结果
vrhero 2010-10-20
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 swalp 的回复:]
我只是想知道执行速度,并不是取最优。我用的时候还有第二种方法呢。感觉第二种安全。
[/Quote]
你先把判断逻辑想清楚...

1.a == "" //a的值是否为空字符串值

2.string.IsNullOrEmpty(a) //a的值是否为空(null)或空字符串值

3.a.Length == 0 //a的值是否不为空且值为0长度字符串(即空字符串值)

三者逻辑完全不同,不具有任何比较的意义...

ps:至于执行速度的差异,去看看源代码就知道了...但就像你漫长一生中打个喷嚏还是咳嗽一声,其差异根本不值得关注...实际工作中在这里认真无异于书呆子...
swalp 2010-10-20
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 vrhero 的回复:]
这里“快”不快没有任何意义...这三种代表完全不同的逻辑,有人要认为其中一种最优或可取代另两种都该自觉面壁去...
[/Quote]
我只是想知道执行速度,并不是取最优。我用的时候还有第二种方法呢。感觉第二种安全。
vrhero 2010-10-20
  • 打赏
  • 举报
回复
这里“快”不快没有任何意义...这三种代表完全不同的逻辑,有人要认为其中一种最优或可取代另两种都该自觉面壁去...
swalp 2010-10-20
  • 打赏
  • 举报
回复
哎!难道是我太钻牛角尖了?
dafei198607 2010-10-20
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 haishenshizi 的回复:]
if(a.Length == 0)
{
}
最快,因为当你创建出a这个字符串对象时,a的属性Length就已经计算出来,只是需要判断下就可以

if(a == "")
{
}

是两个对象的比较

if(Sting.IsNullOrEmpty(a))
{
}
是一个静态函数,不光多判断了 "" & null 并且操作的是对象
[/Quote]
很有道理,往往越简单的越有嚼头,小处弄明白了,大处才可做的有效率,楼主这种精神很好
swalp 2010-10-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 damjmk2 的回复:]
第2种不仅判断了 a="" 也判断了 a=null 的情况
[/Quote]
照这个兄弟说的。判断了2种
那么

if(a == null || a == "")

应该和String.IsNullOrEmpty一样的速度,但是网上有人证实,if(a == null || a == "")
是快的。
haishenshizi 2010-10-20
  • 打赏
  • 举报
回复
2,3没有什么太大的区别,主要就是逻辑清晰即可
1对资源消耗相对2,3有些严重
shadan05 2010-10-20
  • 打赏
  • 举报
回复
我觉的这个速度好像没什么意义吧,一般都是使用第二种。
swalp 2010-10-20
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 z812183667 的回复:]
不知道效率问题,只是我一直都是用第二种!
[/Quote]
我也是一直用第二种,但是突然想到这么多中写法,到底有啥区别
afjafjafj2008 2010-10-20
  • 打赏
  • 举报
回复
9楼说的很有道理!
z812183667 2010-10-20
  • 打赏
  • 举报
回复
不知道效率问题,只是我一直都是用第二种!
haishenshizi 2010-10-20
  • 打赏
  • 举报
回复
或者说的在明白点
String a = "";
这个时候实际是创建了一个对象,等同与String a = new String("");
在创建出一个对象后,先执行的是对象的构造函数
里面会计算出a.Length的属性
加载更多回复(13)

110,536

社区成员

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

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

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