Java if 语句在同时具有赋值和相等性检查 OR - d 时如何工作? [复制]

Posted

技术标签:

【中文标题】Java if 语句在同时具有赋值和相等性检查 OR - d 时如何工作? [复制]【英文标题】:How does a Java if statement work when it has an assignment and an equality check OR - d together? [duplicate] 【发布时间】: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

【问题讨论】:

这就是为什么你应该在这种情况下总是使用括号 你得到的答案没有完全解释问题或者完全错误。请参考链接的问题,一模一样 【参考方案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");
           

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

【讨论】:

以上是关于Java if 语句在同时具有赋值和相等性检查 OR - d 时如何工作? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在Java中检查三个或更多字符串的相等性[重复]

Python中的if语句——参考Python编程从入门到实践

如何检查排列是不是具有相等的奇偶性?

如何散列和检查具有循环引用的对象的相等性

python - 如何在python中使用IF语句检查两个列表的元素是不是相等?

使用“=”测试相等性时“if”语句的意外行为[关闭]