if循环内的表达式求值

时间:2018-10-19 07:21:06

标签: java loops if-statement

为什么下面的代码在里面打印?为什么&&运算符不起作用?

我知道

  

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");
        }
      }
    }

3 个答案:

答案 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 ==

  1. ==
  2. &&
  3. ||

c1 == null || c2 == null && c3 != null

  1. c1 == null-> truec2 == null => truec3 != null->假
  2. true || true || false

要更改默认优先级,请强制使用(),它们的优先级高于&&||

然后实际上是&&||,但是:

  1. &&-如果至少一个(随机数:向左或向右)操作数为false,则不会检查其他字符,结果为“ false”;
  2. ||-如果至少一个(随机数:向左或向右)操作数为true,则不会检查其他字符,结果为“ true”;

无法更改此行为(优化)(我认为,可以通过某些编译器选项,至少对于C/C++编译器而言,可以关闭此优化)。

答案 2 :(得分:0)

您必须添加方括号。

if ( (c1 == null || c2 == null) && c3 != null ) {
          System.out.println("inside");
}

然后它将不会打印状态。