int a = 1; for(;;){int a =1}前面已经定义了int型变量a
这个变量是作为实例变量存在,在for循环体中再次定义a重复定义了一个变量。
而for(;;){ int a=1} int a =1;这个的话,for循环体中的a 的作用域在大括号中,而此时程序中并没有定义过实例变量a的存在,接下来定义的时候就没问题了。
此外,我感觉你的for写的有问题,如果是for(;;)这样写的话,不就是一个死循环了么,
for(;;){ int a=1} int a =1;后面那个int a=1;应该是定义不了的,并不是作用域的问题而是执行不到的问题
学习
变量a已经存在了,在同一个过程里面不能重复声明。
在for循环语句里面的int a作用域只在int a,不过int a的作用域在这个过程都有效。
简单的理解就是java的变量的作用域都是用{}来表明的。
for(;;){ int a=1} int a =1;中的第一个a的作用域在在它的{}结束时就结束了。所以你接下来再定义一个a时,第一个a已经不存在。
int a = 1; for(;;){int a =1}如果你把它写成这样{int a = 1; for(;;){int a =1}}就会看到,第一个a的作用范围中包括了第二个a,在你定义第二个a时,会检查到已经有一个同名变量。
你试一下int a = 1; for(;;){int a =1;system out print(a);}在循环里面输出一下就知道了。你知道调试不?调试一下。