簡體   English   中英

為什么兩次聲明相同名稱的TextView對象會產生錯誤,而在循環內聲明它卻不會產生錯誤?

[英]Why Declaring a TextView object with the same name twice create an error while Declaring it inside a loop doesn't?

對我來說,循環會一遍又一遍地重復一些指令,所以如果我的代碼是這樣的:

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),但是在這樣的循環中編寫相同的東西不會給我一個錯誤

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

TextView textView = new TextView(this);
}

即使是同一回事。 我理解事物(循環)的方式有什么問題嗎?

每次循環結束,舊的TextView都會被銷毀,而新的TextView會被創建。 這沒問題,因為一旦循環結束,它就永遠消失了。

如果僅將三個聲明彼此堆疊,則它們不會被破壞,而是將這三個聲明全部保留在內存中,並且兩個具有相同名稱的變量是非法的(出於明顯的原因)。

它是關於可變范圍的。 您不能在同一范圍內聲明相同的名稱變量。

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);
}

這不是android特定的問題,而是一般的JAVA概念

如果您定義

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

它將引發錯誤,但是如果您創建循環

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

它不會拋出錯誤

每當循環結束時,它都會破壞先前的對象,因此在每次迭代中都會初始化新的對象

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM