我突然怀疑了......
我想知道是否
if(a && b) {
}
与
相同if(a) {
if(b) {
}
}
与否..
这两个案例都给了我相同的结果。但是,在我的项目中使用第一种方法我仍然感到不舒服。
有帮助??
答案 0 :(得分:2)
如果使用If-else语句则 如果循环只执行条件为真:---
if(condition){
//execute when it is true
}
在您的情况下,您使用两个变量a和b与AND OPERATOR。
AND OPERATOR
的属性是If如果给出的值为true,则返回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)
}
答案 1 :(得分:1)
是的,就功能而言,它们是相同的。 &&
是一个短路运营商。因此,在a && b
中,只有b
被评估为a
时才会评估true
。
嵌套if
的情况也是如此。仅当外if
评估为if
时,才会执行内部true
。但是,只有当a
和b
都是true
时才想执行代码,1 st 才会更好地显示您的意图。
但是,一个区别是,您可以通过在嵌套{之前添加该功能,在2 nd 的情况下实现a = true
,b = false
的功能。 {1}} 开始。但是,你不能在1 st
答案 2 :(得分:1)
是一样的。在第一种情况下,编译器保证如果第一个条件返回false,则不会执行第二个条件。
答案 3 :(得分:0)
a && b
表示a
是星期二,b
是,所以:
if(a && b) {
}
不留下优柔寡断的空间,只有当a && b
if身体被执行时才会全部或全无,而
if(a) {
if(b) {
}
}
如果a
,会留出空间,而不考虑b
。因此,如果您想在检查b
之前执行某些操作,
如果你在a
时没有任何事可做,那么两者是相同的,而第一个是首选,因为它更具可读性。
答案 4 :(得分:0)
这两个条件与第一个条件相同:if(a && b){ }
,您正在使用&&
运算符进行检查因此,在a && b
中,b
仅在{{1}时进行评估被评估为真。
而在第二种情况下,首先它将在外部if条件中检查a
的值,如果它满足,那么它将在内部if条件中检查a
的值。
但第一拳更可取。
答案 5 :(得分:0)
是的,这是一回事。 &&
运算符检查两个条件是否都为真。如果你像这样嵌套你的if
语句,它就相同了,因为第二个语句只有在第一个语句为真时才会被检查。如果您需要完成的任务涉及a
为真,而非b
,则只需将它们分开。
答案 6 :(得分:0)
在这两种情况下,它只是short-circuiting.
其中第二个参数仅在第一个参数不足以确定表达式的值时执行或计算:
短路表达式x Sand y(使用Sand表示短路变量)等效于条件表达式,如果x则为y,否则为false;表达式x Sor y等于if x然后为true,否则为y。
来到语法,第一件事(if(a && b)
)美化你的代码并且更具可读性。
答案 7 :(得分:0)
正如我之前所说的那样:它们在技术上是等价的(直到短路语义)。
但我敢说&&运算符在任何情况下都是首选,并且它不仅仅是品味问题。嵌套的if更难以在日常代码中读取,而不仅仅是控制语句,并留下更多的错误空间。
主要是因为if(b)
通信:“仅当 b 为真时才会执行以下块。”
但事实并非如此! 仅当 a和b 为真时才执行该块(这正是第一种方法相当优雅地通信的)。很容易无意中将它从if(a)
上下文中拉出来(任何IDE都有很多方法来改变代码)并创建一个bug。
嵌套if后面也为可怕的代码留下了很大的空间。在内部和外部之间楔入代码会使得理解在何时执行哪些代码变得棘手 - 特别是如果a和b是复杂的表达式。当某人决定抛出其他一些陈述时,事情变得非常令人讨厌...... :-)没有办法让单一的&&&操作
有些人可能认为这种“灵活性”是使用第二种方法的一个原因,但我认为几乎总有一种方法可以使用显式条件干净地重写。编码很难,不需要将所有的脑循环都用在控制逻辑上。
结论:每个Java程序员都理解条件AND运算符的语义。依靠内置的语言结构而不是滚动自己的等价物,对可维护性和正确性起了很大的作用。
希望这有帮助。