Eyp*_*ros 7 java foreach scope
关于变量范围,我有一个相当简单的问题.
我熟悉增强的For-Loops,但我不明白为什么我应该声明一个新变量来保存每个元素.一个例子可能澄清我的问题:
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);
}
Run Code Online (Sandbox Code Playgroud)
那么我为什么要声明这个新变量呢?毕竟i可以在for循环中访问.我不想使用任何以前的值i,只是不想声明一个新的变量.(我猜测其他可迭代项目使用相同的变量可能会更快).
我想这就是增强For For-Loop的构建方式,但这不会打破整个范围的想法吗?
上述行为引发了一个问题.编译器是否对整个循环使用相同的变量for并只更新其值,或者为每次迭代创建一个新变量?
一个有趣的部分是,如果我保持int i的声明(for循环之前和之内)我甚至得到编译器错误
重复的局部变量i
这使得(至少对我来说)事情有点奇怪.所以我不能i在for循环中使用先前声明的变量,但我也不能在其中声明一个具有相同名称的新变量.
那么为什么我应该声明这个新变量呢?
因为这就是语法的定义方式。
毕竟 i 可以在 for 循环内访问。
这就是语义。这与语法无关。
我不想使用任何以前的 i 值,只是不想声明一个新变量。(我猜想对于其他可迭代项目,使用相同的变量可能会更快)。
不要猜测性能。测试和测量。但在这种情况下,没有什么可测量的,因为任何工作代码都比任何非工作代码更快。
| 归档时间: |
|
| 查看次数: |
1498 次 |
| 最近记录: |