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

问题描述 投票:3回答:3

我是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 ++;
}
java loops variables
3个回答
2
投票

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


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
投票

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

记得

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

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

        }
© www.soinside.com 2019 - 2024. All rights reserved.