为什么声明一个具有相同名称的TextView对象两次会产生错误,而在循环内声明它不会?

时间:2017-06-19 18:20:36

标签: java android

对我来说,循环一遍又一遍地重复一些指令,所以如果我的代码是这样的:

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);
}
即使是同样的事情也是如此。 我在理解事物(循环)或什么方面有什么问题吗?

3 个答案:

答案 0 :(得分:0)

每次循环结束时,旧的TextView将被销毁,并且正在创建一个新的<m:MaterialHeader> <m:MaterialNavBar activates="sidenav"> <m:MaterialNavBrand layoutPosition="FIXED" text="Academia de baile Nuria Villamuelas" centerOn="CENTER_ON_SMALL" textColor="INDIGO_DARKEN_4"/> <m:MaterialNavSection float="RIGHT"> <m:MaterialLink text="Link 1"/> <m:MaterialLink iconType="POLYMER"/> </m:MaterialNavSection> </m:MaterialNavBar> </m:MaterialHeader> 。这没有问题,因为一旦循环结束,它就会永远消失。

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

答案 1 :(得分: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);
}

答案 2 :(得分:0)

这不是特定于Android的问题,而是一般的JAVA概念

如果你定义

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

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

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

它不会抛出错误

每次循环结束时,它都会破坏先前的对象,因此在每次迭代时都会对其进行初始化