如何在java

时间:2016-12-19 07:49:57

标签: java pattern-matching expression

我想在Java中检查两个表达式是否相同。假设我有两个表达方式:
exp 1:

A && B && ( C || D)  

exp 2:

B && ( C || D ) && A  

我想检查这两个表达式是否相同。

我的意思是等价的是,如果我们有两个表达式,那么这两个表达式必须具有相同的标记(A,B,C,D)和它们之间相同的关系运算符。并且应该为所有输入返回相同的值。我不想考虑java如何执行这些东西的顺序。我需要的是一个库或一些Java代码片段。有关算法的信息也很好。

1 个答案:

答案 0 :(得分:4)

他们不是因为评价很短。在Java中,A && BA评估为false时立即返回false。它有所不同,例如当谈到Exceptions或布尔方法不是纯函数时。

您可以尝试以下实验:

public class Test {

    public n = 0;
    public boolean A() {
        System.out.println("A");
        return false;
    }
    public boolean B() {
        System.out.println("B");
        return true;
    }
    public boolean C() {
        n++;
        return true;
    }
    public boolean D() {
        n = n*2;
        return false;
    }
    public static void main(String[] args) {
        Test test = new Test();
        if (test.A() && test.B()) { System.out.println("true"); }
        if (test.B() && test.A()) { System.out.println("true"); }
        if (test.C() && test.D()){}
        else {System.out.println(t.n);}
        t.n = 0;
        if (test.D() && test.C()){}
        else {System.out.println(t.n);}
        t.n = 0;
        boolean c = test.C();
        boolean d = test.D();
        if (d && c){}
        else {System.out.println(t.n);}
    }
}

它显示了短期评估与副作用相关的后果。