Java:“ If”语句中AND后的OR运算符

时间:2018-09-05 16:16:28

标签: java if-statement operators

基于Python imports wrong version of sqlite when running teststhis的答案Java对&&||运算符采用短路。它还使&&的优先级高于||。但是以下代码的计算结果为true

    boolean condition1 = true;
    boolean condition2 = true;
    boolean condition3 = true;

    if ( !condition3 && condition1 || condition2 ) {
        System.out.println("Condition is true"); // prints Condition is true
    }

由于condition3设置为true,因此应该导致!condition3为假,那么Java为什么还要检查condition1

如果我在第一个条件周围加上括号,它仍然会评估为true:

    if ( (!condition3) && condition1 || condition2 ) {
        System.out.println("Condition is true");
    }

我了解为什么这段代码的评估结果为true:

    if ( condition1 || condition2 && !condition3) {
        System.out.println("Condition is true");
    }

因为Java一旦在||之后遇到condition1,它甚至都不会检查以下条件。但是我不明白为什么前两个示例评估为true。

我的目标是要求condition3为假,然后让 conditon1condition2(或两者)为真(但如果{{ 1}}是condition3,那么无论truecondition1的评估方式如何,我都不想执行print语句

谢谢

1 个答案:

答案 0 :(得分:8)

您说:

  

与||相比,它具有&&更高的优先级。

这意味着printFunction()将首先被评估。

所以

$groups = [];

    foreach($data as $user)
    {
        $userGroupId = $user['GroupId'];
        $exists = false;

        foreach($groups as $group)
        {
            $groupId = $group['GroupId'];

            if ($groupId == $userGroupId)
            {
                $users = $group['users'];

                $currentUser = array(
                    'UserId'=>$user['UserId'],
                    'UserName'=>$user['UserName'],
                    'Surname'=>$user['Surname']
                );

                array_push($users, $currentUser);
                $exists = true;
                break;
            }
        }

        if (!$exists)
        {
            $addGroup = array(
                'GroupId'=>$user['GroupId'],
                'GroupName'=>$user['GroupName'],
                'users'=>[array(
                    'UserId'=>$user['UserId'],
                    'UserName'=>$user['UserName'],
                    'Surname'=>$user['Surname']
                  )]
            );

            array_push($groups, $addGroup);
        }
    }

等于:

!condition3 && condition1

由于!condition3 && condition1 || condition2 (!condition3 && condition1) || condition2 ,因此表达式为condition2