我突然接到一个奇怪的疑问..Java的嵌套如果条件
我想知道
if(a && b) {
}
是否相同
if(a) {
if(b) {
}
}
或不..
两个案件给了我相同的结果。但是,我仍然不愿意在我的项目中使用第一种方法。
任何帮助?
我突然接到一个奇怪的疑问..Java的嵌套如果条件
我想知道
if(a && b) {
}
是否相同
if(a) {
if(b) {
}
}
或不..
两个案件给了我相同的结果。但是,我仍然不愿意在我的项目中使用第一种方法。
任何帮助?
是的,就功能而言它们是一样的。 &&
是一个短路操作员。因此,a && b
,b
仅在a
评估为true
时才会评估。
与嵌套if
的情况相同。 内部if
将仅在外部if
被评估为true
时执行。但是如果只有在a
和b
都是true
时才想执行代码,则更好地显示您的意图。
但是,一个不同之处在于,你可以通过嵌套if
开始前加入该功能实现的a = true
,b = false
功能,在2 第二情况。但是,你不能这样做1 st
它是一样的。在第一种情况下,编译器保证如果第一个条件返回false,则不会执行第二个条件。
a && b
意味着如果a
是星期二,所以是b
,所以:
if(a && b) {
}
不离开犹豫不决的空间,这是全有或全无,只有a && b
的,如果身体将被执行,而
if(a) {
if(b) {
}
}
如果a
没有考虑b
那么就留下您的空间。所以如果你想在检查b
之前做一些操作,你可以。
如果你在a
时没有什么需要做的事情,那么两者是平等的,因为它更具可读性。
这两个条件都相同第一招:if(a && b){ }
,你与&&
运营商因此检查,在a && b
,b
将只有a
被评估为true进行评估。
在第二种情况下,首先在外部条件下检查a
的值,如果满足则在内部条件下检查b
的值。
但是第一个更可取。
是的,这是一回事。 &&
运营商检查两个条件是否都是真实的。如果你嵌套你的if
这样的陈述,它就相当于同样的东西,因为只有第一个是真的,才会检查第二个陈述。只有在需要做某件事时才将它们分开,其中a
为真,但不是b
。
在两种情况下它只是short-circuiting.
在其中的第二个参数时,才执行或评价如果第一参数不足以确定表达式的值:
短 - 电路表达式x如果x then y else false,那么sand y(使用Sand来表示短路变化)等价于条件表达式;表达式x Sor y相当于如果x则返回true否则y。
即将到来的语法,第一件事(if(a && b)
)美化你的代码和更具可读性。
如果使用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)
}
正如许多人在我面前说:他们在技术上是等效(一直到短路语义)。
但我敢说& &运营商优先任何情况,而且它不只是一个品味的问题。嵌套的if更难以在日常代码中阅读,而不仅仅是控制语句,并且留下更多的错误空间。
主要是因为if(b)
通信:“如果b是真的以下块时,才会执行”。
但这不会发生什么! 该块仅在a和b为真(这正是第一种方法相当优雅地进行通信)时才执行。无意中将其从if(a)
上下文中轻松取出(任何IDE都有很多方法来对代码进行混洗)并创建一个错误。
嵌套的if还为后面的可怕代码留下了很多空间。在内部和外部之间使用楔形码可以很难理解何时执行哪些代码 - 特别是如果a和b是复杂的表达式。而事情变得真的讨厌当有人决定抛一些其他声明.. :-)根本没有办法陷入与一个单一的& & &运算符。有些人可能会认为这种“灵活性”是使用第二种方法的原因,但我认为几乎总是有一种方法可以使用显式条件来干净地重写。如果不将所有的大脑循环都用在控制逻辑上,编码就够用了。底线:每个Java程序员都理解条件AND运算符的语义。依靠内置的语言构造,而不是滚动自己的等价物,这对维护性和正确性有很大的帮助。
希望这会有所帮助。
这应该工作,在我看来。 –
你可以在内部'if'之外的外部'if'块中添加其他语句,但在第一种情况下,两个条件都应该为真以进入'if'块 – pratZ