while循环中的同名foe变量

时间:2017-02-19 08:26:14

标签: android

所以我的问题是......

为什么以下代码会抱怨变量名称' wordView'被多次初始化..

 int index = 0;
    TextView wordView = new TextView(this);
    wordView.setText(words.get(index));
    rootview.addView(wordView);

    index++;
    TextView wordView = new TextView(this);
    wordView.setText(words.get(index));
    rootview.addView(wordView);

    index++;
    TextView wordView = new TextView(this);
    wordView.setText(words.get(index));
    rootview.addView(wordView);

但是这段代码没有?

int index = 0;
while(index<words.size()){
    TextView wordView = new TextView(this);
    wordView.setText(words.get(index));
    rootview.addView(wordView);
    index++;
}

它正在做同样的事情吗?

2 个答案:

答案 0 :(得分:1)

原因很简单。

在第一个代码段中,所有三个变量都在同一个块中定义,因此范围相同,这是不允许的。在块或范围中,您只能定义一次变量。

但在第二个代码段中,您只在该循环块或范围内定义了一次变量。在循环的单次迭代之后,变量的范围结束并且变量的生命周期结束。当新的迭代开始时,初始化一个全新的变量。

这完全取决于变量的范围。您不应该认为循环意味着块中的代码将被多次复制。 循环的每次迭代,块中变量的范围结束,并开始新的范围。

答案 1 :(得分:0)

变量wordView的范围是这里要注意的。

以下是发生的事情:

  1. 在第一个代码段中,变量 wordView将在同一个块中重新声明,从而为您提供错误。您不能在块中具有相同名称的变量。
  2. 在第二个代码段中,您有一个循环内的变量。这意味着变量 wordView在每次迭代结束时获得“新含义”。