2017-06-19 42 views
0

对我来说,循环一遍又一遍地重复一些指令再次所以,如果我的代码是这样的:为什么声明一个具有相同名称的TextView对象两次会产生一个错误,而在一个循环内声明它却不会?

int i = 0; 
while(i<3){ 
System.out.println("Hello world!"); 
} 

这意味着对我来说,我写相同的指令3次这样的:

System.out.println("Hello world!"); 
System.out.println("Hello world!"); 
System.out.println("Hello world!"); 

我是错的?

所以如果我的代码是这样的:

int i = 0 ; 
while(i < 3){ 

TextView textView = new TextView(this); 
} 

这意味着对我说,我写的指令3次这样的:

TextView textView = new TextView(this); 
TextView textView = new TextView(this); 
TextView textView = new TextView(this); 

是不是? 因此乳清当我写这篇文章的代码:

TextView textView = new TextView(this); 
TextView textView = new TextView(this); 

它给了我一个错误,因为我已经重复了相同的名称(TextView的)两次,但写whithin像这样的循环一样的东西不给我一个错误

int i = 0 ; 
while(i < 2){ 

TextView textView = new TextView(this); 
} 

即使它是相同的东西。 在我理解事物(循环)或什么的方式中是否有任何问题?

回答

0

每当循环结束时,旧的TextView正在销毁,并且正在创建一个新的。这没有问题,因为只要循环结束,它就永远消失了。

如果您只是将三个声明堆叠在一起,它们不会被销毁,而是这三个声明全部保留在内存中,并且具有两个具有相同名称的变量是非法的(出于显而易见的原因)。

0

这是关于变量的范围。您不能在同一范围内声明相同的名称变量。

while(i < 2){ 
// this variable's scope is this loop. Outside this loop it is not recognized 
TextView textView = new TextView(this); 
} 

你的代码等于是这样的:

while(i < 2){ 
    new TextView(this); 
} 
+0

你能告诉这个循环的输出初始化新的? –

+0

它将创建三个Textviews。但是你不能用'textview'变量引用它们,因为引用的作用域是循环的内部。在循环之外,变量不被识别。 –

+0

你是不是说这个循环最终只生成一个'textview'?最后的变量覆盖之前的'文字浏览'? –

0

这不是Android的具体问题,而是一般的Java概念

如果定义

int a=3; 
int a=3; 
int a=3; 

它会抛出错误 但是 如果你创建一个循环

while(i<3) 
    { 
     int a=3; 
    } 

它不会抛出错误

每次循环结束,它破坏了以前的对象,从而在每次迭代它是

相关问题