这样的代码:
int i=0;
while(i<3){
   int j=1;
   i++;
}
由于循环,那么j是不是被重复定义了三次?还是一次?编译器会报错吗?(我在JDK中编译时没报错),在内存中j是不是占用了三份的内存?

解决方案 »

  1.   

    名义上的j被定义了3次,但每次都是一个新的j;
    局部变量,出了这个大括号他就失去了意义;
    名义上的j是占用了3份内存,但每个占用内存的“j”不是同一个“j”,
    出了大括号,系统就收回了内存(虚拟机操作当然是延迟的)
      

  2.   

    难道说在定义的时候不分配存储空间,那么在什么时候分配?
    为什么如查我不在循环中重复定义编译器就报错?int a;
    int a;
    a++;这样的代码编译时就报错?
      

  3.   

    应当还是dice_com(乌木) 说的这种情况比较对吧。dice_com(乌木) 说得有理,我试了一下,的确是变量出了大括号就不能用了。
      

  4.   

    试了下VB
      Dim i As Integer
      i = 0
      While (i < 3)
       i = i + 1
       Dim x As Integer
       x = 10
      Wend
      MsgBox x
      
    这个X仍能显示为10,不知道VB的解释器或编译器又是怎么处理的?!
      

  5.   

    这是必然的
    JAVA的变量的作用域就是大括号为界限.