当前位置: 首页 > 面试题库 >

当我们使用赋值而不是比较时,如何评估if / while条件?

令狐昌胤
2023-03-14
问题内容

我在学习Java的OCA / OCP时发现了这一令人惊讶的事情。

以下是if(test condition)部分使我感到惊讶的第一段代码。

public class BooleanIf {
public static void main(String[] args) {
    boolean b = false;
    System.out.println(Boolean.valueOf(b = true));
    if (b = true)
        System.out.println("true");
    else
        System.out.println("false");
}

现在,此输出令人惊讶地为“ true”。

我了解到必须有一个关系条件,该条件会像if (a > b)或类似if (a != b)地返回true或false 。

我想知道在这种情况下它如何返回true。它调用Boolean.valueOf()吗?


问题答案:

=是赋值运算符,==是比较运算符。但

x = y

不仅 分配 的价值yx,它也 将返回
该值。因此,我们可以执行x=(y=1)将分配1给的操作(甚至可以在此处删除括号)y,然后返回1将分配给的操作x

在您的情况下,if (b = true)首先true将其分配给b它,然后将其返回,因此最终if(true),它将始终为该布尔值执行来自分支的代码。

这通常是印刷错误的结果,因为在大多数情况下,我们要使用==(等于运算符)而不是=(赋值运算符)。

为了避免这个错误,我们可以编写如下代码

  • 作为if (b){..}-因为我们b == true总是b跳过== true一部分。if可以使用价值b代替评估b == true。当我们想使用否定而不是==false写时if(!b){..}
  • 使用Yoda条件 if(true == b){..} -如果错误地使用了=而不是==我们将得到编译错误,它将通知我们有关编译错误,因为我们无法 任何 赋给 like true,我们只能将值 赋给变量


 类似资料:
  • Q.while循环条件是作为一个整体进行计算,还是在决定是否进入循环之前一次计算一个条件?

  • 问题内容: 我已经在Swift网站上看​​到了这段代码,并在这里看到了许多帖子,我试图掌握基础知识。如何评估这条线? 我很困惑,因为它不是name ==可选名称,而是分配值,那么该报告如何报告为真,为什么当您用john appleseed替换为nil时它不为真,因为它仍然相等? 问题答案: 基本上,这句话说:“如果可以让新变量等于的非可选版本,请执行以下操作”。正如Martin所指出的,这称为Op

  • 我正在学习亚当·简斯的合唱团教程。 数据是用这个代码块加载的 而准备就绪被定义为 我把这个序列理解为 首先-创建一个名为promises的数组,其中第一项是来自此链接的已解析json,第二项是来自该文件的id/值对的映射 第二,获取promise变量中的所有promise,如果成功,则触发函数ready,如果失败,则不执行任何操作 如果这是对的,那么相对于这样的东西有什么优势呢?我用伪代码写这个因

  • 问题内容: 如果我有以下代码: 请问或会首先评估? 问题答案: 首先评估索引。请参阅JLS第15.26.1节,尤其是: 15.26.1。 简单赋值运算符= … 如果左侧操作数是数组访问表达式(第15.13节),可能包含在一对或多对括号中,则: 1. 首先,评估左侧操作数数组访问表达式的数组引用子表达式。如果该评估突然完成,则赋值表达式由于相同的原因而突然完成;(左操作数数组访问表达式的)索引子表达

  • 问题内容: 我一直习惯使用if,else-if语句,而不是多个if语句。 例: 与示例2相比如何? 我知道功能上它们是相同的。但是,如果不是,则是否是最佳做法?当我指出他可以不同地构造代码库以使其更整洁时,它是由我的一位朋友提出的。对我来说这已经是一种习惯,但是我从来没有问过为什么。 问题答案: 一旦找到正确的语句,它们就会停止进行比较。做每个比较。第一个是更有效的。 编辑: 在注释中已指出您在每

  • 我在查询两个Oracle数据库时遇到问题。 查询是: (NULL实际上是一个参数,传递给查询,查询可能为空,所以我缩短了查询)。 在生产数据库上,它工作正常,响应为NULL。 在dev DB上,我发现了一个错误,即TRUNC不能应用于NUMBER,需要DATE(ORA-00932)。 显然,生产数据库跳过了OR之后条件中的所有内容,开发人员执行OR之后的部分。 我确实知道通过将CAST(MY_PA