2013-04-30 62 views
-2

这个问题用于良好的代码和代码优化开发。布尔状态测试 - 哪个好?

boolean a = false; 

其条件是最好的

if(a == false) 

if(!a) 

请给一些描述与系统级两种状况发生什么。

+5

这是什么编程语言?你使用什么编译器?目标平台是什么? – Thilo 2013-04-30 10:15:12

+1

@Thilo:我问的是一般性的术语,而不是任何选定的平台或编程语言。这个例子。 – 2013-04-30 10:24:16

+4

'if((a == false)== true')怎么了? ; - > – Roddy 2013-04-30 10:26:20

回答

3
if (!a) 

另一种是可怕的“布尔洗钱”风格。

内部的意思是相同的(即使在C中,两个条件都是正确的,因为a0),所以关于优化没有区别。

+0

你能解释术语“布尔洗涤”吗?我喜欢它(让人想起洗钱),但我无法弄清楚。 – 2013-04-30 11:26:55

+0

当我简化了几个'if(condition){var = true; } else {var = false;最近。不知何故,很多人不会将布尔和条件视为同一事物,需要一个“if”或关系运算符来进行转换。是的,与洗钱的相似性是有意的。 – starblue 2013-05-01 17:58:46

3

这些最有可能最终是由编译器决定的完全相同的指令(有问题的语言)。

1

它们完全一样。编译器将代码编译为最好的方式。

+0

我想一些区别@系统级 – 2013-04-30 10:18:59

+2

@AnkurPatel。在“一般条款”中,功能或性能没有区别。一些特定的(并且非常破碎的)编译器或解释器可能比另一个更喜欢它,但是你必须检查asm代码/基准来查看...... – Roddy 2013-04-30 10:29:01

0

我认为这取决于布尔变量的操作历史。

如果之前已赋值给一个布尔变量在不同寻常的方式喜欢它的值使用不同类型的,用数学表达式分配,那么我认为第二选择:如果更安全,更容易函数(!)正如你所期望的那样,但是如果你总是只使用布尔变量或者只对布尔值进行求值的表达式来赋值,那么它并不重要。不过,我个人觉得第一选择:if(a == false)更具可读性。

关于表现,我同意所有其他答案。