为什么IF语句中的否定比较会调用方法

时间:2017-02-28 12:26:20

标签: java if-statement negation method-invocation

我有以下代码

if ( !handleOptions(args) ) {
        return false;
    }

    if ( !initConfig() ) {
        logger.error("Error initializing configuration. Terminating");
        return false;
    }

代码本身是自我解释,直到我注意到没有 else 语句,然而,方法handleOptions和initConfig被调用并执行。这是如何运作的?据我所知, if 子句(在本例中)的参数要么被确定为true,要么抛出异常,或者,它们是假的,在这种情况下我会期望 else ,但我没有看到一个,代码仍然执行。

1 个答案:

答案 0 :(得分:4)

该函数名为 first ,然后测试其返回值以确定是否进入块体。

另一种思考方式是:

if ( !handleOptions(args) ) {
    return false;
}

与此完全相同,但没有变量:

boolean result = handleOptions(args);
if ( !result ) {
    return false;
}

如果你考虑一下,它就是这样;我们无法知道调用函数的结果是否与给定条件匹配而不调用函数并获得结果。

  

if子句的参数(在这种情况下)被确定为true然后抛出异常

if不会抛出异常。 (正在测试的表达式可能,但if本身没有。)

  

...,或者,它们是假的,在这种情况下我会指望其他,但我没有看到一个,代码仍然执行。

else是可选的。如果没有一个,并且条件是假的,那就是没有任何反应。 : - )