如何在循环内声明一个新变量而不是错误?

时间:2018-02-28 17:31:40

标签: java loops variables

我是Android的新手,目前正在学习基础知识。 下面的代码用于显示数字列表(1-10)。我想了解为什么代码在android studio中没有错误运行,它实际上显示了列表。 从我看到的情况来看,我们多次声明变量 wordView 而不更改变量名称。我们每次都更新相同的 WordView 变量吗?如果是的话,我怎么得到名单?

LinearLayout rootView = (LinearLayout) findViewById(R.id.rootView);
int index = 0;
while (index < 10) {
    TextView wordView = new TextView(this);
    wordView.setText(words.get(index));
    rootView.addView(wordView);
    index ++;
}

3 个答案:

答案 0 :(得分:2)

在循环内声明变量使变量仅在循环中该实例的范围内可用。基本上,循环的每次迭代,变量都会在迭代结束时被创建并超出范围(“被遗忘”)。

答案 1 :(得分:1)

范围很重要。

在每次迭代中,Object TextView的新while (index < 10) { TextView wordView = new TextView(this); wordView.setText(words.get(index)); rootView.addView(wordView); index ++; } 被创建并在同一次迭代中死亡,因为范围在同一次迭代中结束。

wordView

变量while (index < 10) { TextView wordView = new TextView(this); // created wordView.setText(words.get(index)); rootView.addView(wordView); index ++; // died here } 被创建并以相同的迭代结束。

{{1}}

一旦范围结束,垃圾收集器就会捕获该实例,因为它不再引用它。

答案 2 :(得分:1)

您可以在循环中优雅地定义变量变量的范围仅在每次迭代之前。在每次迭代中,都会创建 TextView 类型的新对象,但

<强>记住

你不能在if声明

声明变量
   if (index < 10) {
        TextView wordView = new TextView(this);
        wordView.setText(words.get(index)); // this will throw compile time error..

        }