请比较:
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)之后,因此不出现作用域相互覆盖问题。
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)之后,因此不出现作用域相互覆盖问题。
for(int i=0;i<10;i++){
System.out.println("I love this game !");
}
for(int i=0;i<10;i++){
System.out.println("hehe!");
}
中的i变量一样
前一个y作用域在if(){}中
后一个在函数中