False boolean = True?
我在一本书中找到了这段代码,并在NetBeans中执行了它:
1 2 3 4 5 6
| boolean b = false;
if(b = true) {
System. out. println("true");
} else {
System. out. println("false");
} |
我只是不明白为什么这段代码的输出是真的,有人能开导我吗?谢谢。
- = !=?????? ==
- 本代码是一个booleans demonstrates为什么测试平等的true或false。但是不危险的。
它缺少双等号。因此,它执行的是赋值而不是相等比较(记住,赋值的返回值是新值)。在大多数情况下,大多数类型都不是布尔型,这意味着结果不是布尔型,因此对于if语句来说,它是非法的,从而导致编译器错误。但是,由于这里的类型已经是布尔值,因此赋值将导致布尔值,因此安全检查失败。因此,b = true意味着b被赋予值true,这是由if语句返回并检查的值。
这是因为if语句条件不是比较条件。这是一项任务:
它将永远返回真。所以它总是打印true。
如果要进行比较,需要使用==。
- 如果没有收到有关此的警告,则需要启动编译器/IDE警告设置。
- 这个答案是错误的?如果(b=false)(如有目的的分配)逻辑上切换b=true;返回b=false,我将得到false
- @一般来说,你不应该试图写那样的密码。虽然它可能对您很方便,但它很容易混淆下一个试图读取您的代码的人。
- 如果它被评论了并且符合风格,我看不出问题。详细代码并不总是好的…..想一想,如果你有很多专门的计算,需要非常快的东西。我只是惊讶地看到一个测试用例失败了
- @尼克,请你理解的更短!=更快。另外,我们也不再讨论这个话题了。这和我的答案有什么关系?
- 据我所知,如果任务成功的话,它就会打印出来。因此,如果b=false,它应该打印true,因为赋值了?
- 不,不是这样的。这项任务总是"成功"。但赋值运算符返回分配的值。然后if语句接受该值。因为它指定了true并返回true,所以它输入if语句并打印true。
在"if"语句中,将值"true"分配给b。应使用比较运算符"=="检查该值。
1 2 3 4 5 6 7 8 9 10
| boolean b = false;
if(b == true)
{
System. out. println("true");
}
else
{
System. out. println("false");
} |
这是真的,因为=是赋值运算符而不是相等运算符==
想想int x有2个可能的值,1或0。如果x=1,则执行此操作。否则,(x=0),再做点别的。布尔值只是说它要么是一个条件,要么不是那个条件。
因为这是一项任务。你不在B上做检查,你只要给它赋真。
if (b = true)将值true赋值给b,然后作用于该真实值。这就是类C语言的危险所在,如果你不考虑第二个=,当你打算进行比较时,你会得到一个任务,一个意想不到的结果。