【问题标题】:if conditionals : boolean expression variables placing orderif 条件:布尔表达式变量排序
【发布时间】:2017-02-05 14:30:18
【问题描述】:

当我们使用 if 条件时,我们在布尔表达式中指定条件,如下所示:

if(boolean expression). 

如果布尔表达式中有两个变量,例如(bagWeight > WEIGHT_LIMIT),这两个变量出现的顺序是否重要?换句话说,我可以交换这两个变量的位置,例如以下? (WEIGHT_LIMIT < bagWeight)。请注意,它仍然是袋子重量小于重量限制,但我只是切换布尔表达式中首先出现的顺序。并且它是否取决于哪个成为主题,例如被关注和评估的主题? (在这种情况下,我们试图确定行李重量是否超过限制。所以行李重量是根据某种东西来评估的。我称之为主题。)

Eclipse 并没有对我大喊它错了,直觉上它是有道理的,但是不知有没有更常见的编程实践让我感到困扰。所以我的问题是,我可以交换两个变量的位置吗?它是否取决于作为主题的上下文?哪个是更常见的编程实践?

【问题讨论】:

  • 换句话说,我可以交换这两个变量的位置,例如以下? (WEIGHT_LIMIT 是的。 if (a < b) 等价于 if (b > a)
  • 在比较中,变量的顺序并不重要。我更喜欢按“自然顺序”来写一个比较:在口语中,您通常说“如果行李重量小于重量限制”而不是“如果重量限制大于行李重量”。

标签: java variables if-statement boolean-expression placement


【解决方案1】:

您可以随意更改这两个变量的顺序。 Eclipse(或编译器)并不关心,它只是计算表达式并返回一个值,要么是真,要么是假。

【讨论】:

    【解决方案2】:

    我可以交换这两个变量的位置吗,例如以下? (WEIGHT_LIMIT

    是的,它仍然可以完全一样地工作。

    只有在使用短路操作(如||&&)时才能下单。

    例子:

    if (boolean1 || boolean2)
    

    在这种情况下,将首先评估 boolean1。如果计算结果为 true,则不会计算 boolean2,因为第一个满足 if 语句的条件。

    if (boolean1 && boolean2)
    

    在这种情况下,如果boolean1 的计算结果为假,则永远不会计算boolean2,因为boolean1 为假的事实意味着即使boolean2 为真,if 语句的条件永远不会满足。

    希望对您有所帮助。

    【讨论】:

    • "顺序只起作用..." 如果操作数有副作用,操作数的顺序很重要。例如,i++ < i 不等于 i > i++
    【解决方案3】:

    Java 计算 && 和 || 的顺序如果所有内容都已像您的示例中那样被评估为变量,那么它就不那么重要了。如果这些 where 方法改为调用,那么除非必要,否则不会调用“if”的第二部分。根本不会评估 myMethod() 的示例。

    if (true || myMethod())
    

    if (false && myMethod())
    

    这就是为什么您可能会在实际代码中看到与此类似的语句。

    String myStr = null;
    if (myStr != null && myStr.trim().size() > 0)
    

    如果 Java 要评估第二部分,那么当 myStr 为 null 时,您将收到 NullPointerException。 Java 将绕过第二部分的事实阻止了这种情况的发生。

    【讨论】:

      【解决方案4】:

      在您的具体情况下,操作数的顺序无关紧要。由于 if 语句正在比较两个值,因此必须评估这两个值。但是,在某些情况下,顺序确实很重要:

      1. ||&&

      ||&& 是速记逻辑运算符。如果第一个为真,|| 的第二个操作数将不会被计算。如果第一个为 false,则不会计算 && 的第二个操作数。

      1. ++--

      这些可以产生不同的结果:

      if (i++ > i)
      
      if (i < i++)
      

      在第一行中,i 在增量完成后计算,因此第一个操作数比第二个小 1。

      在第二行中,首先计算i,计算结果为i,然后计算i++,计算结果也为i

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-17
        • 2014-01-16
        • 1970-01-01
        • 1970-01-01
        • 2020-09-02
        • 2014-03-11
        相关资源
        最近更新 更多