Java 使同名的新ArrayList行为不同

Java 使同名的新ArrayList行为不同,java,arraylist,Java,Arraylist,所以我试着用ArrayList做实验,我遇到了这个问题: 当我这样做时,为什么Java会说“ArrayList已声明”: ArrayList<Integer> myList = new ArrayList<>(); ArrayList<Integer> myList = new ArrayList<>(); ArrayList myList=new ArrayList(); ArrayList myList=新的ArrayList(); 但Ja

所以我试着用ArrayList做实验,我遇到了这个问题:

当我这样做时,为什么Java会说“ArrayList已声明”:

ArrayList<Integer> myList = new ArrayList<>();
ArrayList<Integer> myList = new ArrayList<>();
ArrayList myList=new ArrayList();
ArrayList myList=新的ArrayList();
但Java不会在我这样做时说列表已经声明(编译时没有错误):


for(int i=0;i在第一种情况下,在同一范围内定义两个同名变量

在循环中,myList变量的作用域仅在循环内。这意味着每次进入循环时,变量都会被启动,然后在循环结束时被销毁


看看:

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<>();
}

for(int i=0;i因为您有两个同名的变量。在第二个变量中,您始终只有一个变量,即使循环是无穷大的。大括号描述变量的范围。在循环中,变量
myList
在循环的每一圈结束时都超出范围。此外,您还有不需要的
()
在变量声明中。
for(int i=0; i<5; i++){
    ArrayList<Integer> myList = new ArrayList<>();
}