2014-09-06 108 views
1

我从头开始考虑变量的范围规则。我对编程并不陌生,这使我更害怕,我不知道这个问题的答案。变量的范围规则

记得阅读有关变量作用域在网络上,他们也会有这样的例子中,他们将有一个{}外部声明的变量,他们会改变{}块内的值,而当他们打印它在这两个不同的范围内,它们会得到不同的结果。

现在,在下面的代码中。

main(){ 
    int a=20; 
    sysout(a); 

    if(true){ 
    a=30; 
    sysout(a); 
    } 
    sysout(a); 
} 

现在,我得到20,30,30作为输出。我对此感到满意。但后来我想到了互联网上的那些例子给我看到了不同的结果。所以我想我会在{}

码内再次宣布a

main(){ 
    int a=20; 
    sysout(a); 

    if(true){ 
    int a; // In java, this gives me error, saying duplicate local variable a. 
    a=30; 
    sysout(a); 
    } 
    sysout(a); 
} 

那么,究竟是例子,我在网上看到的。如果有人能让我摆脱苦难。

谢谢

回答

3

如果是这种例子:

int a=20; 
main(){ 
    sysout(a); 

    if(true){ 
    int a = 30; // now this will shadow the class variable a 
    sysout(a); 
    } 
    sysout(a); 
} 

现在输出应该是:

20 30 20 
+0

啊,是的。我想这就是它。谢谢 – Kraken 2014-09-06 06:13:07

0

局部变量不能在本地范围内重新声明。在第二种情况下,变量a位于main方法的本地范围内,并且您又试图在不允许的块的本地范围内声明它。

您可以更好地试试这个:

int a=20; //Here a is outside the scope of main, so you can redeclare it. 
main(){ 
    sysout(a); 

    if(true){ 
    int a; 
    a=30; 
    sysout(a); 
    } 
    sysout(a); 
} 
+0

刚才不是简单地复制我的代码; - ) – 2014-09-06 06:13:04

+0

@JunedAhsan: - 绝对不是,我在添加解释,并且只是添加了代码。所以你打我在那里 – 2014-09-06 06:13:58

+0

也许是巧合,但我有疑问,特别是因为评论。 – 2014-09-06 06:14:57