Java中for的作用域问题

img


初学者,这个是想从1-100中找出所有的质数,想问一下那个boolean放在for之前和之后的所得的结果为什么会有差距呀,不应该在外面的作用域更大嘛。。

回顾下 for循环的语法机制以及运行原理:

for(初始化表达式;布尔表达式;更新表达式){
        循环体(由java语句构成);
    }

     注意:
        1、初始化表达式最先执行,并且在整个循环中只执行一次。
        2、条件表达式结果必须是一个布尔类型,也就是true或者false。
    
    执行原理:
        先执行初始化表达式,并且初始化表达式只执行一次。
        然后判断条件表达式的结果,如果是true,则执行循环体。
        循环体结束之后,执行更新表达式。
        更新完之后,再判断条件表达式的结果,如果还是true,
        继续执行循环体。
        
        直到更新表达式执行结束之后,再次判断条件时,条件为falsefor循环终止。

    更新表达式的作用是:控制循环的次数,换句话说,更新表达式会更新
    某个变量的值,这样条件表达式的结果才又可能从true变成false,从而
    终止for循环的执行。如果缺少更新表达式,很有可能会导致死循环。

在说一下 嵌套循环总的循环次数 = 内循环次数*外循环次数

然后回到你这个问题,你可以简单理解循环最外层的k针对的是整个循环中共用的变量,一次改变,在整个循环中都可见。但是你在循环中的k只针对这一次循环有效,就相当于开始一次循环新创建了一个k的变量,同理,这个变量对子循环来说是全部可见的,但是当外层循环到了下一次,那么又是一个新的k了,同样的道理,直到循环结束

回答仓促,有用望采纳,不完善的解释点待优化,感兴趣深入了解的话,还可以去学习一下JVM的内存模型和对象引用部分内容,相信你会理解的更加透彻,加油!

for的循环体在其后的两个大括号之间,如果没有大括号,那就只有一行语句。如果for语句后面有分号,那就一行语句都没有。
你这个布尔量,使用来对内层循环所用的标志量,不是外层循环。当然你定义在内外层都可以。重要的是内层循环开始时要将这个标志设置为true就可以了

你把k的定义放到for i那个循环里面,就意味着每次for i循环都会重新创建一个k变量,并赋值为true,而上一个循环的k变量在本次循环已经失效了。