使具有相同名称的新ArrayList行为不同

时间:2019-02-22 10:26:06

标签: java arraylist

所以我只是想尝试使用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<>();
 }

2 个答案:

答案 0 :(得分:0)

在第一种情况下,您将在相同范围内定义两个具有相同名称的变量。

在循环情况下,myList变量的作用域仅在循环内部。这意味着每次您进入循环时,变量都会被初始化,然后在循环结束时销毁。

看看:https://www.geeksforgeeks.org/variable-scope-in-java/

答案 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