无法理解java中的流控制

无法理解java中的流控制,java,boolean,Java,Boolean,我能够从一个编码网站上解出所附的代码。但是,我的答案与网站的答案不同。下面发布的是代码 static boolean b1, b2; public static void main(String [] args) { int x = 0; if ( !b1 ) /* Line 7 */ { if ( !b2 ) /* Line 9 */ { b1 = true; x++;

我能够从一个编码网站上解出所附的代码。但是,我的答案与网站的答案不同。下面发布的是代码

static boolean b1, b2;
public static void main(String [] args) 
{
    int x = 0;
    if ( !b1 ) /* Line 7 */
    {
        if ( !b2 ) /* Line 9 */
        {
            b1 = true;
            x++;
            if ( 5 > 6 ) 
            {
                x++;
            }
            if ( !b1 ) 
                x = x + 10;
            else if ( b2 = true ) /* Line 19 */
                x = x + 100;
            else if ( b1 | b2 ) /* Line 21 */
                x = x + 1000;
        }
    }
    System.out.println(x);
}
}
我的想法是:

最初,b1=false和b2=false,它通过前两个if条件 除了将x的值增加到>1之外,还将b1设置为true。从那时起,它开始对每个条件失败,并将>最终值打印为1

网站的解决方案:

作为实例变量,b1和b2被初始化为false。if测试
第7行和第9行成功,因此b1设置为真,x设置为
增加。下一个成功的if测试在第19行(注意
代码没有测试b2是否为真,而是将b2设置为>真。
由于第19行成功,后续的else if(第21行)>将
跳过。x的最终值为101

我从网站解决方案中不了解的内容:

“请注意,代码不是测试b2是否为真,而是设置 “这是真的”。 在不测试其状态的情况下,如何将b2的值设置为“真”

任何建议都会非常有用

第19行是:

else if ( b2 = true )
编码网站可能试图教你一个常见的编程错误,即使用赋值而不是比较

代码(如上所述)将
true
的值分配给
b2
,而不是将
b2
的值与
true
进行比较。赋值表达式的结果为
true
,因此
if
将始终成功,并执行其代码块。在执行这一行代码之前,无论b2的值是多少,都会发生这种情况

如果您使用的可能是预期用途,即:

else if ( b2 == true )

然后进行比较,
如果
表达式(及其块的执行)将取决于
b2

的值,引号应该是引号,而不是代码。这是测试读者注意力的一种方法,它使用
b2=true
而不是
b2==true
,所以b2被赋值为true。检查=。你可以选择你最喜欢的IDE并调试它。带有if/else的代码的格式会给人一种错误的印象,即其他代码属于哪个位置。为了清晰起见,在每个条件后使用花括号。我试图给出一个鱼竿,而不是盘子上的鱼;)。