为什么以下内容正确且有效?我认为每个对象应该有不同的名称:
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中是如何工作的 - 循环创建了具有相同名称的不同对象?
谢谢!
答案 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)
这应该指导您在阵列上获得不同的输出名称 如果你正在寻找同名循环
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;
虽然这将以逗号输出