【问题标题】:Are changes made to variables in function calls in if conditions permanent?如果条件是永久性的,是否对函数调用中的变量进行了更改?
【发布时间】:2013-12-26 07:57:19
【问题描述】:

我想调用一个函数,但前提是它返回一个 true 值。函数本身在正常调用时会修改全局变量;我想知道if 语句是否永久存储这些更改,或者它是否只是测试函数的结果并在测试后将变量重置为以前的值?

换句话说,我可以使用这个代码吗:

if(function() == true)
   function();

function 只会被调用一次,还是会被调用两次?

【问题讨论】:

  • 如果函数从未运行过,如何评估 if 语句?

标签: java if-statement conditional-statements


【解决方案1】:

method 被调用了两次(前提是它在第一次运行时返回 true),并且 method 所做的任何更改都是永久性的,除非您以某种方式显式反转它们。

【讨论】:

    【解决方案2】:

    如果您的函数在IF 条件下返回TRUE,那么您的函数将被调用两次。 如果它返回FALSE,该函数将在您的IF 条件内调用一次

    【讨论】:

    • 小点但是java社区不喜欢大写的TRUE和FALSE。这不是旧的 C。
    • 你说得对,我输入大写是为了让读者更喜欢visible :)
    【解决方案3】:

    如果function()至少在第一个实例中返回true,它将被调用两次。

    但是为什么需要使用函数的返回值来决定是否调用该函数呢?看来您可以将此逻辑合并到function() 本身。如果调用者需要知道function() 做了什么,您可以适当地调整返回值。

    还有一点:如果你的函数正在修改全局变量,那么你应该考虑并发问题。您可能需要将function() 标记为synchronized

    【讨论】:

      【解决方案4】:

      function() 是一种.. 方法。考虑一下:

      private boolean function() {
         /* block of code */
         return true;
      }
      

      当您到达if 语句时,将调用function()。这意味着 代码块 已被执行。然后,function() 返回 true

      现在,你进入了if 块,在那里.. 你再次执行function().. 这意味着代码块 将再次执行。

      通常,当您有一个返回boolean 的方法并执行某些操作时,您会将结果分配给一个变量:

      boolean result = function();
      

      然后您可以在result 上询问任何您想要查看方法的输出(通常true 表示成功运行,false 表示出现问题)。

      【讨论】:

        【解决方案5】:

        答案是它会在条件中被调用一次,如果它返回true,那么它会被第二次执行。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-12-12
          • 2014-06-01
          • 2020-02-12
          • 2023-02-07
          • 1970-01-01
          • 2023-04-05
          相关资源
          最近更新 更多