2013-07-19 55 views
-1

我突然接到一个奇怪的疑问..Java的嵌套如果条件

我想知道

if(a && b) { 
} 

是否相同

if(a) { 
    if(b) { 
    } 
} 

或不..

两个案件给了我相同的结果。但是,我仍然不愿意在我的项目中使用第一种方法。

任何帮助?

+0

这应该工作,在我看来。 –

+0

你可以在内部'if'之外的外部'if'块中添加其他语句,但在第一种情况下,两个条件都应该为真以进入'if'块 – pratZ

回答

1

是的,就功能而言它们是一样的。 &&是一个短路操作员。因此,a && b,b仅在a评估为true时才会评估。

嵌套if的情况相同。 内部if将仅在外部if被评估为true时执行。但是如果只有在ab都是true时才想执行代码,则更好地显示您的意图。

但是,一个不同之处在于,你可以通过嵌套if开始前加入该功能实现的a = trueb = false功能,在2 第二情况。但是,你不能这样做1 st

1

它是一样的。在第一种情况下,编译器保证如果第一个条件返回false,则不会执行第二个条件。

0

a && b意味着如果a是星期二,所以是b,所以:

if(a && b) { 
} 

不离开犹豫不决的空间,这是全有或全无,只有a && b的,如果身体将被执行,而

if(a) { 
    if(b) { 
    } 
} 

如果a没有考虑b那么就留下您的空间。所以如果你想在检查b之前做一些操作,你可以。

如果你在a时没有什么需要做的事情,那么两者是平等的,因为它更具可读性。

0

这两个条件都相同第一招:if(a && b){ },你与&&运营商因此检查,在a && bb将只有a被评估为true进行评估。

在第二种情况下,首先在外部条件下检查a的值,如果满足则在内部条件下检查b的值。

但是第一个更可取。

0

是的,这是一回事。 &&运营商检查两个条件是否都是真实的。如果你嵌套你的if这样的陈述,它就相当于同样的东西,因为只有第一个是真的,才会检查第二个陈述。只有在需要做某件事时才将它们分开,其中a为真,但不是b

0

在两种情况下它只是short-circuiting.

在其中的第二个参数时,才执行或评价如果第一参数不足以确定表达式的值:

短 - 电路表达式x如果x then y else false,那么sand y(使用Sand来表示短路变化)等价于条件表达式;表达式x Sor y相当于如果x则返回true否则y。

即将到来的语法,第一件事(if(a && b))美化你的代码和更具可读性。

2

如果使用if-else语句然后 如果循环将执行唯一的条件是正确的:---

if(condition){ 
//execute when it is true 
} 

在你的情况,你正在使用两个变量a和b和经营者。 AND OPERATOR的属性是如果所有赋值为真,那么它将返回true否则为false。

如果你想用你的方法,然后

/* 
check for your in a and b 
both are true 
*/ 
then your method will be execdute 

if(a && b) { 
//if a and b both return true(a=true,b=true) 
} 
0

正如许多人在我面前说:他们在技术上是等效(一直到短路语义)。

但我敢说& &运营商优先任何情况,而且它不只是一个品味的问题。嵌套的if更难以在日常代码中阅读,而不仅仅是控制语句,并且留下更多的错误空间。

主要是因为if(b)通信:“如果b是真的以下块时,才会执行”。

但这不会发生什么! 该块仅在a和b为真(这正是第一种方法相当优雅地进行通信)时才执行。无意中将其从if(a)上下文中轻松取出(任何IDE都有很多方法来对代码进行混洗)并创建一个错误。

嵌套的if还为后面的可怕代码留下了很多空间。在内部和外部之间使用楔形码可以很难理解何时执行哪些代码 - 特别是如果a和b是复杂的表达式。而事情变得真的讨厌当有人决定抛一些其他声明.. :-)根本没有办法陷入与一个单一的& & &运算符。有些人可能会认为这种“灵活性”是使用第二种方法的原因,但我认为几乎总是有一种方法可以使用显式条件来干净地重写。如果不将所有的大脑循环都用在控制逻辑上,编码就够用了。底线:每个Java程序员都理解条件AND运算符的语义。依靠内置的语言构造,而不是滚动自己的等价物,这对维护性和正确性有很大的帮助。

希望这会有所帮助。