使用循环使用相同名称的不同对象

时间:2017-04-16 20:24:09

标签: java android

为什么以下内容正确且有效?我认为每个对象应该有不同的名称:

LinearLayout rootView = (LinearLayout)findViewById(R.id.rootView);


int i = 0;
while (i<5) {
    TextView wordView = new TextView(this);
    wordView.setText(words.get(i));
    rootView.addView(wordView);

    i++;
}

但是,如果我试着没有循环:

TextView wordView = new TextView(this);
wordView.setText(words.get(0));
rootView.addView(wordView);

TextView wordView = new TextView(this);
wordView.setText(words.get(1));
rootView.addView(wordView);

它是不允许的,那么它在java中是如何工作的 - 循环创建了具有相同名称的不同对象?

谢谢!

2 个答案:

答案 0 :(得分:5)

您需要了解的是本地变量的块范围,即每个局部变量范围仅限于块并尝试以下代码,它将起作用:

{//1st block started
   TextView wordView = new TextView(this);
   wordView.setText(words.get(0));
   rootView.addView(wordView);
  //1st block wordView scope ends here
}//1st block ended

{//2nd block started
   TextView wordView = new TextView(this);
   wordView.setText(words.get(1));
   rootView.addView(wordView);
    //2nd block wordView scope ends here
}//2nd block ended

此外,进入while循环,您可以将其视为像上面的5个块(即,每个迭代执行每个块)。

您可以从JLS中引用here局部变量范围的工作原理:

  

每个局部变量声明语句都会立即包含在   一个街区。局部变量声明语句可以混合使用   与块中的其他类型的陈述一起自由。

此外,只需对您的短语“每个对象应该有不同的名称”进行一次更正,这应该像“每个引用变量应该具有不同的名称”以使其更有意义(因为对象被赋值给引用变量并由引用变量指向)。

答案 1 :(得分:-1)

这应该指导您在阵列上获得不同的输出名称  如果你正在寻找同名循环

&#13;
&#13;
private void searchPayment_btn_Click(object sender, RoutedEventArgs e)
    {
        DataRowView drv = (DataRowView)customerDataGrid.SelectedItem;
        String result = (drv["customer_id"]).ToString();
        presenter.getSelecetedCustomerPayment(Convert.ToInt32(result));
    }
&#13;
&#13;
&#13;

虽然这将以逗号输出