【问题标题】:How does a Java if statement work when it has an assignment and an equality check OR - d together? [duplicate]Java if 语句在同时具有赋值和相等性检查 OR - d 时如何工作? [复制]
【发布时间】:2017-02-19 16:39:33
【问题描述】:

为什么这个带有赋值和相等检查的 if 语句评估为假?

public static void test() {

    boolean test1 = true; 
    if (test1 = false || test1 == false) {
        System.out.println("Yes");
    } else {
        System.out.println("No");
    }       
}

为什么要打印No

【问题讨论】:

  • 这就是为什么你应该在这种情况下总是使用括号
  • 你得到的答案没有完全解释问题或者完全错误。请参考链接的问题,一模一样

标签: java


【解决方案1】:

因为operator precedence。相当于这样:

boolean test1 = true; 
if (test1 = (false || test1 == false)) {
...
}

括号中的部分计算为false

【讨论】:

  • @Reign: test1 = false 都设置了值 并且 有一个结果,false。赋值的结果就是赋值的值。
【解决方案2】:

您在 if 语句中为 var 赋值,但没有使用它。如果要在 if 语句中赋值并使用,可以这样做:

boolean test1;
if ((test1 = false) == true) {
    System.out.println("Yes");
} else {
    System.out.println("No");
}

【讨论】:

  • 嗯,当然。但是,如果你要改变一些事情,你可以写boolean test1 = false; System.out.println("No");,不会有任何混淆。
  • 是的,对不起,我会编辑它:P thx
【解决方案3】:

if 语句中有以下运算符,它们的优先级如下:平等 > 逻辑或 > 赋值

if 然后像这样减少:

(test1 = false || test1 == false) //substituing test1 with its value

(test1 = false || true == false) //evaluating equality

(test1 = false || false) //evaluating logical OR

(test1 = false) //evaluating assignment

(test1) //substituing test1 with its value

(false) //evaluating primitive value, going to else block

因此打印

【讨论】:

  • 没有。 Java evaluates left-to-right。赋值在相等之前完成。
  • @AndyTurner 如果首先评估作业,它应该打印出Yes,对吧?
  • @AndyTurner ((test1 = false) || test1 == false) 会打印 Yes
  • ((test1 = false) || test1 == false) 是一个不同的表达方式。
  • @AndyTurner 我知道,但要强调的是,如果没有括号,不能先评估赋值,否则 OP 的代码会打印 Yes
【解决方案4】:

当您将 test1 指定为 false 时,此代码的结果将打印“no” 测试1 = 假 然后 if 语句评估为 false 因为您然后评估 test1 == false 和 else 块执行

这可能是您正在寻找的:

   if ((test1 == false) || (test1 == false)) //this line if the first answer is true it returns true without checking the seconded statement.  
     // if (test1 == false) would be the, same elauates as true 
     {
            System.out.println("Yes");
        } else {
        System.out.println("No");
    }       

查看短路或操作符,这可能有助于您更好地掌握问题

【讨论】:

    猜你喜欢
    • 2014-11-07
    • 1970-01-01
    • 1970-01-01
    • 2019-10-09
    • 2023-04-02
    • 2023-01-10
    • 2020-08-07
    • 2016-07-25
    • 1970-01-01
    相关资源
    最近更新 更多