所以我只是想尝试使用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<>();
}
答案 0 :(得分:0)
在第一种情况下,您将在相同范围内定义两个具有相同名称的变量。
在循环情况下,myList变量的作用域仅在循环内部。这意味着每次您进入循环时,变量都会被初始化,然后在循环结束时销毁。
答案 1 :(得分:0)
1。。但是,您无法在Java的同一范围内创建相同的名称变量。
2。 关于在循环内声明相同的变量。这称为 variable shadowing :
当在某个范围内声明的变量(决策块,方法或内部类)与在外部范围内声明的变量具有相同的名称时,会发生可变阴影。在标识符(名称,而不是变量)级别
Java中的变量范围
$m.Matches.groups["mylabel"].Value
就您而言,
在每个循环之后,作用域被破坏,并且变量消失了。在下一个循环中,将创建一个新的作用域,然后可以在该作用域中再次声明该变量。
与此:
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;
}
每次迭代都会创建一个新块。而且每个块中只有1个名为for(int i=0; i<5; i++){
ArrayList<Integer> myList = new ArrayList<>();
}
的变量。
引用here