我有一个关于变量范围的相当简单的问题。
我对增强型循环很熟悉,但是我不明白为什么我应该声明一个新变量来保留每个元素。一个例子可以澄清我的问题:
int[] ar = {1, 2, 3};
int i = 0;
for(i : ar) { // this causes an error if I do not declare a new variable: int i
// for(int i : ar) // this works fine
System.out.println(i);
}
那为什么要声明这个新变量呢?毕竟i
在for循环内是可访问的。我不想使用任何先前的值i
,只是不想声明一个新变量。(我猜想对于其他可迭代项,使用相同的变量可能会更快)。
我想这就是增强型循环的构建方式,但这不会破坏整个范围的想法吗?
上述行为引起了一个问题。编译器是否在整个循环中使用相同的变量for
并只是更新其值,还是为每次迭代创建一个新变量?
一个有趣的部分是,如果我同时保留int i的声明(在for
循环之前和循环之内),我什至会收到有关以下内容的编译器错误:
局部变量i重复
这(至少对我而言)使事情变得更加奇怪。因此,我不能i
在for
循环内使用先前声明的变量,但也不能在循环内使用相同的名称声明一个新变量。
那为什么要声明这个新变量呢?
因为这就是定义语法的方式。
毕竟我可以在for循环内访问。
这就是语义。它与语法无关。
我不想使用任何以前的i值,只是不想声明一个新变量。(我猜想对于其他可迭代项,使用相同的变量可能会更快)。
不要猜测性能。测试和测量。但是在这种情况下,没有什么可衡量的,因为任何有效的代码都比任何非有效的代码都要快。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句