请看图,为什么输出语句写在for循环外面,会报错,说我没有给a初始化,我明明在for循环里面给a赋值2了呀,这不是初始化吗,为什么非要在第三行赋值才算初始化
再看此图,输出语句写在for循环里面,就算第三行没有赋值,也没有报错,为什么会这样,懵逼了,输出语句写在循环外面跟写在循环里面有什么区别吗,为什么写在外面,就要在第三行初始化,写在里面,不用在第三行初始化,为啥?!
请看图,为什么输出语句写在for循环外面,会报错,说我没有给a初始化,我明明在for循环里面给a赋值2了呀,这不是初始化吗,为什么非要在第三行赋值才算初始化
再看此图,输出语句写在for循环里面,就算第三行没有赋值,也没有报错,为什么会这样,懵逼了,输出语句写在循环外面跟写在循环里面有什么区别吗,为什么写在外面,就要在第三行初始化,写在里面,不用在第三行初始化,为啥?!
因为for、if、switch都有可能不会执行
而由于图灵停机问题,编译器不可能一开始就知道循环是否会停止,所以不会在编译阶段去执行for循环以确定循环到底是否能够进入或能够停止
所以编译器没法确定循环会执行
那么如果循环根本不会执行,而变量又没有初值,后面对变量的读取就会出错
为了预防这种情况,要求你必须在确定能够执行的位置赋初值,而在不确定是否会执行的代码里写的赋值不算初值
-=-==-=
当你在if里写了赋值,而在else里也写了赋值,也即在条件分支的每个分支中都写了赋值,编译器也会认为你的变量是有值的;但当你任意一个分支没有赋值,编译阶段就会报错
同理,如果在switch里赋值而switch没有default的分支,编译也会报错