pf_*_*les 8 java operator-precedence
我从某个地方知道逻辑和:'&&'的优先级高于逻辑或:'||' 在java.And编程时我很少犯错误.但到目前为止,我没有找到关于这种优先权如何真正起作用的任何线索?如果我不知道两者的优先级以及我会犯下什么错误会怎么样?我试着编写一些代码来证明'&&'和'||'的优先级 但失败了,例如:
boolExp1 || boolExp2 && boolExp3 || boolExp4
Run Code Online (Sandbox Code Playgroud)
无论"&&"和"||"的优先级如何,上面的代码都会产生相同的结果,即'false || false && true || 无论优先级是什么,false'结果都是假的.
所以,换句话说,我想要一个方法或函数,可以证明'&&'和'||'的优先级,它应该产生不同的结果取决于'&&'和'||'的优先级......这个功能可以制作吗?有可能吗?我想这可能是一个棘手的问题或一个非常简单的问题......可能不是一个java问题,而是一些数学......总而言之,有人帮忙吗?谢谢.
Jon*_*eet 19
我们来看看你的例子:
boolExp1 || boolExp2 && boolExp3 || boolExp4
Run Code Online (Sandbox Code Playgroud)
现在我们相信这些行为:
boolExp1 || (boolExp2 && boolExp3) || boolExp4
Run Code Online (Sandbox Code Playgroud)
对?
因此,让我们假设相反的情况是正确的,实际上就是这样
(boolExp1 || boolExp2) && (boolExp3 || boolExp4)
Run Code Online (Sandbox Code Playgroud)
什么样的价值boolExp1会给我们带来不同的结果?
好吧,我们来看看:
boolExp1 = true
boolExp2 = false
boolExp3 = false
boolExp4 = false
Run Code Online (Sandbox Code Playgroud)
在"&&具有更高优先级"规则下,结果将是真实的.在"||具有更高的优先级规则"下,结果将为false.然而,快速测试表明表达式的计算结果为true.
当然,这并不能证明&&的优先级高于|| - 只是那个|| 没有比&&更高的优先级.我们可以考虑它们是否具有相同的优先级 - 并以类似的方式测试其他表达式...找到一个样本表达式和值,这些表达式和值将在不同的优先级规则下给出不同的结果,并测试它们.
最终,我更喜欢:
我不会首先使用第一个表达式"原样"...因为除非你真的知道优先规则(并且我怀疑许多Java开发人员没有 - 我不能发誓我已经得到了&&和||右)你在黑暗中.最好将其明确和清楚地表达在哪里有任何疑问.
Sto*_*ica 10
如果&&没有比优先级更高的优先级||,那么这个表达式:
a || b && c
Run Code Online (Sandbox Code Playgroud)
会像这样评估:
(a || b) && c
Run Code Online (Sandbox Code Playgroud)
为了验证是否是这种情况,您都可以产生的所有组合a,b和c,结果比较这两个表情,看看他们总是相等与否,那就是:
a,b和c(a || b && c) == ((a || b) && c)示例代码:
for (int i = 0; i < 8; ++i) {
boolean a = ((i >> 2) & 1) == 1;
boolean b = ((i >> 1) & 1) == 1;
boolean c = (i & 1) == 1;
boolean x1 = (a || b && c);
boolean x2 = ((a || b) && c);
if (x1 != x2) {
System.out.println(String.format("%s %s %s", a, b, c));
System.out.println(String.format(" %s || %s && %s => %s", a, b, c, x1));
System.out.println(String.format(" (%s || %s) && %s => %s", a, b, c, x2));
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
Run Code Online (Sandbox Code Playgroud)true false false true || false && false => true (true || false) && false => false true true false true || true && false => true (true || true) && false => false
因此,&&优先级高于||.
小智 7
我也有同样的问题,但答案实际上已经给了我。这是我的例子:
true || true && false
Run Code Online (Sandbox Code Playgroud)
相当于
true || (true && false)
Run Code Online (Sandbox Code Playgroud)
因此,通过这个示例,很容易看出,在 Java 中,逻辑 && 的优先级高于 ||。
| 归档时间: |
|
| 查看次数: |
9566 次 |
| 最近记录: |