a b c d都是字符串
第一种 if(!(a.equals(b) && c.equals(d) && e.equals(f)))
第二种 if(!a.equals(b) || !c.equals(d) || !e.equals(f))
请问哪种方式效率上高一点?哪一种编程更规范点?
从逻辑上讲,只要ab,cd,ef有一组不相等,就返回真。
从圈复杂度上讲:这么一句代码的圈都超过4。
从可读性上讲:难以阅读。第二种相对要好些。
从效率上讲:都有机会短路,效率与数据相关。
Boolean isAnyStringNotEqual = !a.equal(b) || !c.equal(d) || !e.equal(f); if(isAnyStringNotEqual){ //Do something.... } //如上方案没有降低圈复杂度,但是提高了可读性。 //如下为C#代码 bool isAnyStringNotEqual = string.Format("{0}||{1}||{2}", a, c, e) == string.Format("{0}||{1}||{2}", b, d, f) 通过插入判定符,先拼接字符串再比较,达到减少复杂度的效果。
你这2中实现的都是不一样的需求,怎么比较,其实都不好
为什么不一样?新手不懂
@犯犯: 我说的不好是,很多团队这样写,代码复杂度太高,!(a.equals(b) && c.equals(d) && e.equals(f))是啊a!=b,c!=d,e!=f同时成立,下面是||只要一个成立
@稳稳的河: 你朋友说的是|,不是||,||不会短路的,效率一样
@稳稳的河: 你确定没说反?
@犯犯: 什么说反了了,|只要你正确后面就不要判断了
@稳稳的河: ||才是短路或呀,|是位运算吧
@犯犯: 我刚测试了下,很久没有用了,搞错了,不过第2点回复也没错
@稳稳的河: 恩恩,你觉得这两个判断一样吗
@犯犯: if(!(a.equals(b) && c.equals(d) && e.equals(f)))不成立的时候是a==b,c==d,e==f,if(!a.equals(b) || !c.equals(d) || !e.equals(f))不成立的条件也是a==b,c==d,e==f,是一样的,我开始看错短路了
@稳稳的河: 是这样的,又回到我问题的出发点了。。
@犯犯: 这个是一样的,短路都是一起短路
你这两个判断根本就不是一样的..
不好意思. 仔细看了下. 应该是相等的.
第一种写法很容易让人不小心看成 if(!a.equals(b) && !c.equals(d) && !e.equals(f))
个人觉得第二种好. 其实这个效率影响不大的. 最重要是可读性.
怎么不一样了
@犯犯: 效果完全不一样,第一种是非满足所有的条件,第二种非满足任何一个条件。产生的效果完全不一样。
@`````: 不都是只要三个条件有一个不等就可以了吗?想不通。。。
@犯犯: 你把&& 读成并且 把|| 读成或者 ,然后再试试?
if(!(a.equals(b) && c.equals(d) && e.equals(f))) = if(!a.equals(b) && !c.equals(d) && !e.equals(f)) != if(!a.equals(b) || !c.equals(d) || !e.equals(f))
if(!a.equals(b) || !c.equals(d) || !e.equals(f)) == if(!(a.equals(b)) || !(c.equals(d)) || !(e.equals(f)))
@`````: if(!(a.equals(b) && c.equals(d) && e.equals(f))) = if(!a.equals(b) && !c.equals(d) && !e.equals(f)) 这两个不等吧, 后面也就不对了吧
@犯犯: 不好意思. 仔细看了下. 应该是相等的.
第一种写法很容易给人误导成 if(!a.equals(b) && !c.equals(d) && !e.equals(f))
个人觉得第二种好. 其实这个效率影响不大的. 最重要是可读性.
@犯犯: 如果非(a =b 并且 c = d 并且 e = f )
= 如果a不等于b 并且 c 不等于d 并且 e不等于f.
这个确定不等?
@`````:
我一开始也误解成这个. 其实认真看起来. 非 (a =b 并且 c = d 并且 e = f ). 如果其中一个是false. 那么括号里面的结果就是false. 然后加个非就是true了.
所以并不是a!=b,b!=c,c!=d,d!=f
@`````: 真的不等,我在eclipse上刚刚跑了一下
@李丶GuanYao: 是这个道理,看来第一种还真的很容易让人误解啊,看来真的是第二种好点
@李丶GuanYao: 嗯嗯 是的。这个我也想错了。是这样的,忘记了这个条件其实是一个整体了。是的,这点我错了。