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