请比较:
class SDemo{
    public static void main(String args[]){
(1)     int y; 
        ...        if(x==10){ 
(2)         int y = 20; 
            ...
(3)     }
        y = 100; 
        ...
(4) }
}编译时将出错:
SDemo.java:8: y is already defined in main(java.lang.String[])
            int y = 20;
                ^
解释:
局部变量的作用域(the scope of a local variable),比如例中的 y ,并非整个main函数,而是从其声明那一处(1)开始,至(4)结束。即在我的例子里,外部变量 y 的作用域是(1)到(4),而 if 中的 y 作用域为(2)到(3),因此出现重名错。但再你的实例里,由于 if 外部的 y 声明在(3)之后,因此不出现作用域相互覆盖问题。