Rah*_*wal 9 java conditional if-statement
我无法理解为什么跟随if块执行.如何评估if条件?
public class Test
{
public static void main(String[] args)
{
if (true || (false || true) && false)
{
System.out.println("How does this condition becomes true.");
}
if (false && (false || true) || true)
{
System.out.println("Same with this condition, why is it true.");
}
}
}
Run Code Online (Sandbox Code Playgroud)
T.J*_*der 15
&&优先级高于||(源).因此,增加一些内容来强调如何评估这些内容:
if (true || ((false || true) && false))
// -------------^-------------------------^
Run Code Online (Sandbox Code Playgroud)
和
if ((false && (false || true)) || true)
// -----^-------------------------^
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,你结束了x || y在那里x的true第一个例子,并且y是在第二个例子中真实的.当然这两个true || false和false || true的true.
您可以通过使用输出它在做什么(方法见它在行动现场副本)(请记住,这两个||和&& 短路,这意味着他们不评价不能改变结果操作数):
public class Test
{
private static boolean b(String label, boolean value) {
System.out.println(label + ": " + value);
return value;
}
public static void main(String[] args)
{
if (b("1", true) || (b("2", false) || b("3", true)) && b("4", false))
{
System.out.println("How does this condition becomes true.");
}
if (b("5", false) && (b("6", false) || b("7", true)) || b("8", true))
{
System.out.println("Same with this condition, why is it true.");
}
}
}
Run Code Online (Sandbox Code Playgroud)
运行时,输出:
1: true How does this condition becomes true. 5: false 8: true Same with this condition, why is it true.
首先,你必须已经知道false || trueis true。
除此之外,您还需要了解另外两件事:
&& 和 || 运算符“短路”,这意味着如果没有必要,他们不会评估右侧。
当优先级相同的运算符出现在同一个表达式中时,必须有一个规则来控制哪个先求值。除了赋值运算符之外的所有二元运算符都是从左到右计算的;赋值运算符从右到左计算。
从优先级表中,我们知道&&高于||。
所以在你的问题中,让我们做基本的推理。
if (true || (false || true) && false)
true || no_matter_what_is_in_right_side会true,所以我们得到了一个true.
if (false && (false || true) || true)
这一次比上一次更棘手,这次我们必须考虑烦人的优先级。我们的推理如下:
false && no_matter_what_is_in_right_side将是false,我们剩下的就是:
false || true
Run Code Online (Sandbox Code Playgroud)
再次,我们有true最后。
但是如果你已经注意到了这个技巧:我们从最右边 开始,true那么我们可以像前面的那样直接得到true.
正如迈克尔所说,我们最好使用括号来表达确切的顺序,而不是依赖优先级,这实际上很难记住##。
| 归档时间: |
|
| 查看次数: |
179 次 |
| 最近记录: |