回顾下 for循环的语法机制以及运行原理:
for(初始化表达式;布尔表达式;更新表达式){
循环体(由java语句构成);
}
注意:
1、初始化表达式最先执行,并且在整个循环中只执行一次。
2、条件表达式结果必须是一个布尔类型,也就是true或者false。
执行原理:
先执行初始化表达式,并且初始化表达式只执行一次。
然后判断条件表达式的结果,如果是true,则执行循环体。
循环体结束之后,执行更新表达式。
更新完之后,再判断条件表达式的结果,如果还是true,
继续执行循环体。
直到更新表达式执行结束之后,再次判断条件时,条件为false,
for循环终止。
更新表达式的作用是:控制循环的次数,换句话说,更新表达式会更新
某个变量的值,这样条件表达式的结果才又可能从true变成false,从而
终止for循环的执行。如果缺少更新表达式,很有可能会导致死循环。
在说一下 嵌套循环总的循环次数 = 内循环次数*外循环次数
然后回到你这个问题,你可以简单理解循环最外层的k针对的是整个循环中共用的变量,一次改变,在整个循环中都可见。但是你在循环中的k只针对这一次循环有效,就相当于开始一次循环新创建了一个k的变量,同理,这个变量对子循环来说是全部可见的,但是当外层循环到了下一次,那么又是一个新的k了,同样的道理,直到循环结束
回答仓促,有用望采纳,不完善的解释点待优化,感兴趣深入了解的话,还可以去学习一下JVM的内存模型和对象引用部分内容,相信你会理解的更加透彻,加油!
for的循环体在其后的两个大括号之间,如果没有大括号,那就只有一行语句。如果for语句后面有分号,那就一行语句都没有。
你这个布尔量,使用来对内层循环所用的标志量,不是外层循环。当然你定义在内外层都可以。重要的是内层循环开始时要将这个标志设置为true就可以了
你把k的定义放到for i那个循环里面,就意味着每次for i循环都会重新创建一个k变量,并赋值为true,而上一个循环的k变量在本次循环已经失效了。