当我们使用if条件时,我们在布尔表达式中指定条件,如下所示:
if(boolean expression).
如果我在布尔表达式中有两个变量,例如(bagWeight > WEIGHT_LIMIT)
,它们看起来重要的两个变量的顺序是什么?换句话说,我可以交换这两个变量吗?以下的地方? (WEIGHT_LIMIT < bagWeight)
。请注意,它仍然是包重量小于重量限制,但我只是在布尔表达式中切换首先出现的顺序。是否取决于哪一个成为一个主题,就像一个专注于和评估的主题? (在这种情况下,我们会试图弄清楚包重是否超过限制。所以包重量会根据某些东西进行评估......我称之为主题。)
Eclipse没有向我尖叫它是错误的,直觉上它是有道理的,但不管怎么说,它是否让我感到烦恼,是否有更常见的编程习惯。所以我的问题是,我可以交换两个变量&#39;地方,没关系?它取决于作为主题的背景吗?哪个是更常见的编程习惯?
答案 0 :(得分:1)
您可以根据需要随意更改两个变量的顺序。 Eclipse(或编译器)并不关心,它只是计算表达式并返回一个值,或者为true。
答案 1 :(得分:0)
我可以交换这两个变量的位置,如下所示吗? (WEIGHT_LIMIT&lt; bagWeight)
是的,它仍然可以完全相同。
订单仅在使用||
或&&
等短路操作时才会播放。
的示例:
if (boolean1 || boolean2)
在这种情况下,首先评估boolean1。如果它的计算结果为true
,则不会评估boolean2,因为第一个符合if
语句的条件。
if (boolean1 && boolean2)
在这种情况下,如果boolean1
的计算结果为false,那么boolean2
永远不会被评估,因为boolean1
为false的事实意味着即使boolean2
为真, <{1}}陈述的条件永远不会得到满足。
希望有所帮助。
答案 2 :(得分:0)
Java评估的顺序&amp;&amp;和||如果所有内容都已按照示例中的方式计算到变量中,则不是那么重要。如果这些方法调用,则除非必要,否则不会调用“if”的第二部分。何时根本不评估myMethod()的示例。
if (true || myMethod())
或
if (false && myMethod())
这就是为什么你可能会在实际代码中看到与此类似的陈述。
String myStr = null;
if (myStr != null && myStr.trim().size() > 0)
如果Java要评估第二部分,那么当myStr为null时,你会得到一个NullPointerException。 Java将绕过第二部分的事实阻止了这种情况发生。
答案 3 :(得分:0)
在您的特定情况下,操作数的顺序无关紧要。由于if语句正在比较两个值,因此必须评估这两个值。但是,在某些情况下,订单 无关紧要:
||
和&&
||
和&&
是速记逻辑运算符。如果第一个为真,则不会评估||
的第二个操作数。如果第一个操作数为false,则不会评估&&
的第二个操作数。
++
和--
这些可以产生不同的结果:
if (i++ > i)
if (i < i++)
在第一行中,i
在增量完成后进行评估,因此第一个操作数比第二个操作数小1。
在第二行中,首先评估i
,评估为i
,然后评估i++
,评估结果为i
。