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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在循环内声明一个新变量而不是错误?相关的知识,希望对你有一定的参考价值。

我是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 ++;
}
答案

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

另一答案

范围很重要。

在每次迭代中,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 
    }

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

另一答案

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

记得

你不能在if声明中声明一个变量

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

        }

以上是关于如何在循环内声明一个新变量而不是错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过单击片段内的线性布局从片段类开始新活动?下面是我的代码,但这不起作用

什么是 C++ 中的“变量‘i’未在范围内声明”?

ES6 二

let 和const命令

循环内与循环外变量声明[重复]

数学上相同的变量 - 一个破坏着色器而不是