java - Java 增强 for 循环中的隐式语句
问题描述
由于增强的 for 循环是只读的,似乎每个元素都被复制到您在设置循环时定义的新变量中。这里有隐含的声明吗?也许是这样的:
int[] numbers = {1, 2, 3};
for(int number : numbers){
numbers = numbers[i]; // Implicit statement? Problem: the i variable does not exist.
// Do stuff...
}
解决方案
是的,确切地说,增强for
循环的处理在块内创建了一个局部变量。根据JLS§14.4.2,对于数组,增强for
循环等效于:
增强的 for 语句等效于以下形式的基本 for 语句:
...
for (int #i = 0; #i < #a.length; #i++) { {VariableModifier} TargetType Identifier = #a[#i]; Statement }
(如果循环的目标是一个Iterable
而不是一个数组,这会略有不同,但类似。)
将其应用于您的循环:
int[] numbers = {1, 2, 3};
for (int i = 0; i < numbers.length; i++) {
int number = numbers[i];
// Do stuff...
}
您无法访问该i
变量(如规范中所列),但它在字节码中。#i
推荐阅读
- eclipse - Gluon 移动字符集问题
- reactjs - 用 jest 测试时如何选择 dom
- java - 如何修复 task.getresult().getdownloadurl()
- reactjs - 需要手动刷新页面才能更新
- angular - 为不同页面重用通用布局如何根据页面的角度隐藏和显示布局
- symfony - Symfony 3.4 实体关系多对多
- python - 寻找拐点:将梯度样条连接到原始数据
- javascript - 如何在等待完成之前显示加载图标
- html - 当网页缩小时使图像堆叠
- json - 使用 VueJS 将 JSON 发布到 localhost Go 后端时出现 EOF