所以我只是想尝试使用 ArrayList 并且我遇到了这个问题:
当我这样做时,为什么 Java 会说“ArrayList 已经声明”:
ArrayList<Integer> myList = new ArrayList<>();
ArrayList<Integer> myList = new ArrayList<>();
但是当我这样做时,Java 不会说列表已经声明(并且编译时没有错误):
for(int i=0; i<5; i++){
ArrayList<Integer> myList = new ArrayList<>();
}
1.但是,你不能在java中创建相同作用域内的同名变量。
2. 关于在循环内声明相同的变量。这称为变量阴影:
当在特定范围(决策块、方法或内部类)内声明的变量与在外部范围内声明的变量具有相同名称时,就会发生变量阴影。在标识符级别(名称,而不是变量)
Java中变量的作用域
public class Test
{
// All variables defined directly inside a class
// are member variables
int a;
private String b;
void method1() {
// Local variable (Method level scope)
int x;
}
int method2() {....}
char c;
}
在你的情况下,
每次循环后,作用域被销毁,变量消失。在下一个循环中,会创建一个新的作用域,并且可以在该作用域中再次声明该变量。
有了这个:
for(int i=0; i<5; i++){
ArrayList<Integer> myList = new ArrayList<>();
}
每次迭代都会创建一个新块。myList
每个块中只有 1 个命名的变量。
参考这里
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句