我的第一个问题,我是初学者。
请参考下面的代码,我试着定义j两次,java编译器给我一个错误,我完全理解。
我的问题是,如果我无法定义变量两次,为什么循环内的“char c = ...”正在工作。从逻辑上看,当循环体第一次执行时,定义了char c变量,当循环体执行第二次时,因为char c已经定义,它应该抛出一个错误,但它没有。为什么呢?
public class test{
public static void main(String[] args){
int j=1;
for (int i=0; i<10; ++i){
char c = (char)(Math.random()*26+97);
System.out.println(i+1+" = "+c);
}
int j=2;
}
}
由于
答案 0 :(得分:3)
为什么循环中的“char c = ...”正在运行
因为for
循环有自己的范围,所以每次迭代都会有一个不同的变量。
总的来说,您的代码将创建10个不同的变量。
答案 1 :(得分:1)
变量c
仅存在于for
循环的范围内。当迭代结束变量时,它可以在下一次迭代中重新声明。
答案 2 :(得分:0)
编译器检查声明。它们在执行期间执行。
编译器看到变量是在范围内声明的,而这就是它所关心的全部内容。它不检查该范围内的代码执行的频率。
答案 3 :(得分:0)
每当你在大括号中声明一个变量时,变量只存在于那些大括号内,也就是说,大括号外的任何代码都无法访问变量。
if(true) {
char c = 'x';
}
c = 'y'; // Error
这是因为一旦超出范围,变量就不再存在。
这是您的代码中发生的事情
for (int i=0; i < 5; i++)
{
char c = 'x'; // variable created on each iteration hence no error
}
c = 'y'; // error since variable gets destroyed