我想在Java
中检查两个表达式是否相同。假设我有两个表达方式:
exp 1:
A && B && ( C || D)
exp 2:
B && ( C || D ) && A
我想检查这两个表达式是否相同。
我的意思是等价的是,如果我们有两个表达式,那么这两个表达式必须具有相同的标记(A,B,C,D)和它们之间相同的关系运算符。并且应该为所有输入返回相同的值。我不想考虑java如何执行这些东西的顺序。我需要的是一个库或一些Java代码片段。有关算法的信息也很好。
答案 0 :(得分:4)
他们不是因为评价很短。在Java中,A && B
在A
评估为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);}
}
}
它显示了短期评估与副作用相关的后果。