不明确的布尔表达式

时间:2014-11-06 19:40:51

标签: java c# boolean-expression

我正在阅读一些旧代码并遇到一个不合格的布尔表达式,如下所示:

if (first && second || third)
{
    // do something
}

有两种有效的方法来限定该表达。

if ((first && second) || third)

if (first && (second || third))

对第一,第二和第三的某些值进行不同的评估。

我在C#中尝试了这一点,结果与第一个资格认证方法一致。好奇心变得更好,我也在Java中尝试过,这与第二种方法一致。为什么是这样?不同语言的评价是否应该相同?

1 个答案:

答案 0 :(得分:6)

Java和C#在&&之前评估||,因为逻辑AND在两种语言中都有更高的优先级:

我认为您错误地运行了测试。

正如您通过运行Java

所看到的那样
class Test {

    public static void main (String[] args) {

        boolean a = true;
        boolean b = true;
        boolean c = false;

        System.out.println(a || b && c);
        System.out.println((a || b) && c);
        System.out.println(a || (b && c));
    }
}

C#

using System;

public class Test
{
    public static void Main()
    {
        bool a = true;
        bool b = true;
        bool c = false;

        Console.WriteLine(a || b && c);
        Console.WriteLine((a || b) && c);
        Console.WriteLine(a || (b && c));
    }
}

Ideone上的演示,两者都产生相同的输出:

true
false
true

这表明&&在两种语言中||之前都会进行评估。