2017-06-19 41 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; 
    } 

它不會拋出錯誤

每次循環結束,它破壞了以前的對象,從而在每次迭代它是

相關問題