gpt4 book ai didi

java - 就阴影而言,Java 中的 for each 和传统 for 循环有什么区别?

转载 作者:搜寻专家 更新时间:2023-10-30 19:53:57 24 4
gpt4 key购买 nike

这是我的代码:

class HelloWorld {

char[] foo = {'a', 'b'};

// This will compile
void foo() {
for (char foo : foo) {
}
}

// This will not compile
void bar() {
for (char foo = 0; foo < foo.length; foo++) {
}
}
}

为什么 foo 编译但是编译 bar 失败:

Error: char cannot be dereferenced

使 foo 中的循环编译但 bar 失败的两个循环声明之间的区别是什么?

最佳答案

我们可以通过查看 JLS§14.14.2 看出差异对增强的 for 在处理数组时如何工作的描述:

The enhanced for statement is equivalent to a basic for statement of the form:

T[] #a = Expression;
L1: L2: ... Lm:
for (int #i = 0; #i < #a.length; #i++) {
{VariableModifier} TargetType Identifier = #a[#i];
Statement
}

请注意变量是如何在循环的主体 中声明的,而不是在循环的 header 中。也就是说,您的 foo 函数是这样的:

void foo() {
{ // Freestanding block for scope, though not really needed as `foo` has
// nothing else in it
char[] a = foo; // T[] #a = Expression;
for (int i = 0; i < a.length; i++) {
char foo = a[i]; // {VariableModifier} TargetType Identifier = #a[#i];
}
}
}

这就是为什么你在增强的 for 中不用阴影,而不是在传统的 for 中,后者需要访问原始数组(以获取其 length,获取 i 等的条目)。

关于 How does the Java 'for each' loop work? 中增强的 for 循环的更多信息及其答案。

关于java - 就阴影而言,Java 中的 for each 和传统 for 循环有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43213811/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com