Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么在for循环中定义新对象不是重定义中的错误 for(int i=1;i_Java - Fatal编程技术网

Java 为什么在for循环中定义新对象不是重定义中的错误 for(int i=1;i

Java 为什么在for循环中定义新对象不是重定义中的错误 for(int i=1;i,java,Java,的区别在于范围 在第一种情况下,列表a一直被引用到主方法的末尾,所以如果在同一范围内有两个同名的变量,编译器将进行比较 对于第二种情况,每次循环执行时,最后一次迭代的列表a不再被引用,因此我们可以再次声明。在循环中,声明的变量直到循环结束,一旦循环迭代,先前声明的变量就不再存在。但是,一旦退出循环,就不再是这种情况了,因此也就不再存在error如果当前变量范围中存在变量,则不能声明变量 在您的情况下,它在每次迭代结束时都不被引用: for(int i=1; i<=6; i++){

的区别在于范围

在第一种情况下,
列表a
一直被引用到
主方法
的末尾,所以如果在同一范围内有两个同名的变量,编译器将进行比较


对于第二种情况,每次循环执行时,最后一次迭代的
列表a
不再被引用,因此我们可以再次声明。

在循环中,声明的变量直到循环结束,一旦循环迭代,先前声明的变量就不再存在。但是,一旦退出循环,就不再是这种情况了,因此也就不再存在error

如果当前变量范围中存在变量,则不能声明变量

在您的情况下,它在每次迭代结束时都不被引用:

for(int i=1; i<=6; i++){
    List<Integer> a = new ArrayList<Integer>();
}

用于循环中的(int i=1;i
i++
时,列表a将被销毁

在循环之外

<代码>列表< <代码> >代码> > I++< /C> > .< /P> < P>不能声明两个同名的变量(尽管它们有不同的类型)存在于同一范围内。如果可能的话,那么java编译器将如何确定你的意思:

public void Func()
{
   List<Integer> a = new ArrayList<Integer>(); 
   // do something
}

for (int i=1; i<=6; i++)
{
    Func();
}
List a=new ArrayList();
List a=new ArrayList();//错误:重复变量a
a、 clear()//无法确定您指的是哪个“a”
现在,在
for
循环编译器将只看到一个变量
a
被声明,这对他来说很好!因此没有编译器错误

但是当循环迭代时,每次创建
列表a
时,前面的
a
就变成了垃圾。我们很幸运,因为JAVA有垃圾收集器,可以收集孤立
列表a
的垃圾

不要
new
局部变量
a
进入
for
循环,这只是内存泄漏

public void Func()
{
   List<Integer> a = new ArrayList<Integer>(); 
   // do something
}

for (int i=1; i<=6; i++)
{
    Func();
}
List<Integer> a = new ArrayList<Integer>();
List<Integer> a = new ArrayList<Integer>(); //Error: Duplicate variable a
a.clear() // cannot determine which 'a' you meant