我在学习OCA/OCP for Java时发现了这个令人惊讶的事情.
下面是if(测试条件)部分让我感到惊讶的第一段代码.
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");
}
Run Code Online (Sandbox Code Playgroud)
现在这令人惊讶的输出是"真实的".
我了解到必须有一个关系条件,它返回真或假if (a > b)或类似if (a != b).
我想知道它是如何在这种情况下返回真实的.它调用Boolean.valueOf()吗?
=是赋值运算符,==是比较运算符.但
x = y
Run Code Online (Sandbox Code Playgroud)
不仅指定了yto的值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){..} -如果错误地,我们将使用=的,而不是==我们将得到编译错误,这将告诉我们吧,因为我们不能指定任何东西的价值一样true,我们只能赋值的变量.