我在一本书中找到了这段代码,并在Netbeans中执行了它:
boolean b = false;
if(b = true) {
System.out.println("true");
} else {
System.out.println("false");
}
我不明白为什么这段代码的输出值是true,能有人解释一下吗?谢谢。
这里缺少双等号。所以它执行的是一个赋值语句而不是一个相等比较(请记住,赋值语句的返回值是新值)。在大多数情况下,大多数类型不是布尔类型,这意味着结果不是布尔类型,因此对于 if
语句,它会导致编译错误。然而,由于这里的类型已经是布尔类型,赋值操作的结果为布尔类型,因此安全检查失败。因此,b = true
表示将值 true
赋给变量 b
,并且这个值被返回并由 if
语句检查。
if(b = true)
这将始终返回true。因此,它将始终打印true
。
如果您想进行比较,则需要使用 ==
。
在您的“if”语句中,您将值“true”分配给b。您应该使用比较运算符“==”来检查该值。
boolean b = false;
if(b == true)
{
System.out.println("true");
}
else
{
System.out.println("false");
}
if(b = true)
这是真的,因为“=”是赋值运算符而不是相等运算符“==”。
if (b = true)
将值 true
赋给 b
,然后基于这个真值执行操作。这就是类 C 语言的危险之处,如果你在本意是比较时漏掉了第二个 =
,就会得到一个赋值而不是预期的比较,从而导致意外结果。
这是因为它是一个赋值操作。你不需要对 b 进行检查,只需将 true 赋值给它即可。
想象一下 int x 有两个可能的值,要么是1,要么是0。如果 x = 1,则执行此操作。否则,(x = 0)则执行其他操作。布尔值只是表示它是一个条件,或者不是该条件。
true
或者false
不仅毫无意义,而且很危险。 - user207421