【问题标题】:Making new ArrayList with same name behaving different [duplicate]使具有相同名称的新ArrayList表现不同[重复]
【发布时间】:2019-02-22 10:26:06
【问题描述】:

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

【问题讨论】:

  • 因为你有两个同名的变量。在第二个中,您始终只有一个,即使循环是无限的
  • 大括号描述了变量的范围。在循环中,变量myList 在循环的每一轮结束时超出范围。
  • 另外,你的变量声明中有不需要的()

标签: java arraylist


【解决方案1】:

1. 但是,您不能在 java 中的相同范围内创建相同名称的变量。

2. 关于在循环中声明相同的变量。这叫做variable shadowing

当在某个范围(决策块、方法或内部类)中声明的变量与在外部范围中声明的变量具有相同的名称时,就会发生变量隐藏。在标识符级别(名称,而不是变量)

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的变量。

参考here

【讨论】:

    【解决方案2】:

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

    在循环的情况下,myList 变量的作用域只在循环内部。这意味着每次进入循环时都会启动变量,然后在循环结束时将其销毁。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多