我突然有一个奇怪的疑问。。
我想知道是否
if(a && b) {
}
和
if(a) {
if(b) {
}
}
或不..
这两种情况都给了我相同的结果。但是,在我的项目中使用第一种方法仍然让我感到不舒服。
有什么帮助吗??
如果使用 If-else 语句,则 if 循环将只执行条件为真:---
if(condition){
//execute when it is true
}
在您的情况下,您将两个变量 a 和 b 与 AND 运算符一起使用。的属性AND OPERATOR
是如果所有给出的值都为真,那么它将返回真,否则返回假。
如果你想使用你的方法,那么
/*
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)
}
是的,就功能而言,它们是相同的。&&
是短路算子。因此,仅当评估为时a && b
,b
才会评估in 。a
true
嵌套if
的情况也是如此。仅当外部评估为时,内部if
才会执行。但是,如果您只想在两者和are时执行代码,第一个会更好地显示您的意图。if
true
a
b
true
但是,一个区别是,您可以在第二种情况下通过在嵌套开始之前添加该功能来实现a = true
,的功能。但是,你不能在第一时间做到这一点b = false
if
是一样的。在第一种情况下,编译器保证如果第一个条件返回 false,则不会执行第二个条件。
正如许多人在我之前所说的那样:它们在技术上是等效的(一直到短路语义)。
但我敢说 && 运算符在任何情况下都是首选,这不仅仅是品味问题。嵌套的 if 在日常代码中更难阅读,而不仅仅是控制语句,并且为错误留下了更多空间。
主要是因为if(b)
通信: “仅当b为真时才执行以下块”。
但事实并非如此!仅当a 和 b为真时才执行该块(这正是第一个方法相当优雅地传达的内容)。很容易无意中将其从if(a)
上下文中拉出来(任何 IDE 都有很多方法可以改变代码)并产生错误。
嵌套的 if 也为以后的可怕代码留下了很大的空间。内部和外部之间的楔入代码会使理解何时执行哪些代码变得很棘手——尤其是如果 a 和 b 是复杂的表达式。当有人决定在一些 else 语句中折腾时,事情变得非常糟糕...... :-) 根本没有办法用一个 && 运算符陷入混乱。
有些人可能会争辩说这种“灵活性”是使用第二种方法的原因,但我认为几乎总有一种方法可以使用显式条件干净地重写它。无需将所有大脑周期都花在控制逻辑上,编码就足够难了。
底线:每个 Java 程序员都了解条件与运算符的语义。依靠内置的语言结构而不是滚动您自己的等价物对于可维护性和正确性大有帮助。
希望这可以帮助。
a && b
表示 if a
is tue and so is b
, 所以:
if(a && b) {
}
不会为优柔寡断留有余地,全有或全无,仅当a && b
if 主体将被执行时,而
if(a) {
if(b) {
}
}
留给你行动的空间a
,暂时不考虑b
。因此,如果您想在检查之前执行一些操作,b
则可以。
如果您没有任何事情要做,a
那么两者是平等的,恕我直言,第一个是更喜欢的,因为它更具可读性。
这两个条件与第一个条件相同:if(a && b){ }
,您正在使用&&
运算符进行检查 因此,仅当评估为真时a && b
,b
才会评估in 。a
而在第二种情况下,首先它将检查a
外部 if 条件的值,如果满足,那么它将检查b
内部 if 条件的值。
但第一个更可取。
是的,这是一样的。操作员检查这&&
两个条件是否为真。如果你if
像这样嵌套你的语句,它相当于同样的事情,因为第二个语句只有在第一个语句为真时才会被检查。仅当您需要做一些涉及a
真实但不真实的事情时才将它们分开b
。
在这两种情况下,它只是短路。
其中第二个参数仅在第一个参数不足以确定表达式的值时才被执行或评估:
短路表达式 x Sand y(用 Sand 表示短路变种)等价于条件表达式 if x then y else false;表达式 x Sor y 等价于 if x then true else y。
谈到语法,第一件事 ( if(a && b)
) 美化了您的代码并且更具可读性。