不明确的布尔表达式

gca*_*lli -5 c# java boolean-expression

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

if (first && second || third)
{
    // do something
}
Run Code Online (Sandbox Code Playgroud)

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

if ((first && second) || third)
Run Code Online (Sandbox Code Playgroud)

if (first && (second || third))
Run Code Online (Sandbox Code Playgroud)

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

我在C#中尝试了这个,结果与第一个鉴定方法一致.好奇心在我身上变得更好,我也在Java中试用了它,这与第二种方法一致.为什么是这样?不同的语言评估是否应该相同?

Bar*_*ers 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));
    }
}
Run Code Online (Sandbox Code Playgroud)

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));
    }
}
Run Code Online (Sandbox Code Playgroud)

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

true
false
true

&&以前||用两种语言评估哪个节目.