我在学习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
不仅 分配 的价值y
来x
,它也 将返回
该值。因此,我们可以执行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){..}
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