为什么下面的代码在里面打印?为什么&&运算符不起作用?
我知道
if((c1 == null || c2 == null)&& c3!= null)
会做我想要的。但是为什么没有括号就无法正常工作?
有人可以解释一下if循环中表达式求值的规则吗?
public class HelloWorld
{
// arguments are passed using the text field below this editor
public static void main(String[] args)
{
String c1 = null;
String c2 = null;
String c3 = null;
if ( c1 == null || c2 == null && c3 != null ) {
System.out.println("inside");
}
}
}
答案 0 :(得分:2)
c1 == null || c2 == null && c3 != null
等于
c1 == null || (c2 == null && c3 != null)
是
true || (true && false)
是
true || false
是
true
答案 1 :(得分:1)
Java: Which has more priority: || or && or ==
c1 == null || c2 == null && c3 != null
c1 == null
-> true
,c2 == null
=> true
,c3 != null
->假true || true || false
要更改默认优先级,请强制使用(
和)
,它们的优先级高于&&
或||
。
然后实际上是&&
和||
,但是:
&&
-如果至少一个(随机数:向左或向右)操作数为false
,则不会检查其他字符,结果为“ false”; ||
-如果至少一个(随机数:向左或向右)操作数为true
,则不会检查其他字符,结果为“ true”; 无法更改此行为(优化)(我认为,可以通过某些编译器选项,至少对于C/C++
编译器而言,可以关闭此优化)。
答案 2 :(得分:0)
您必须添加方括号。
if ( (c1 == null || c2 == null) && c3 != null ) {
System.out.println("inside");
}
然后它将不会打印状态。