为什么 foreach 不能与 String 一起使用?

Ada*_*Lee 0 java

我正在尝试类似的东西

String s = "test string";
for(Character c: s) {

}
Run Code Online (Sandbox Code Playgroud)

编译器报告错误。我想知道为什么我不能将 foreach 与 String 一起使用?

Ste*_*n C 5

原因在JLS 14.14.2中阐述:

\n
\n
EnhancedForStatement:\n    for ( {VariableModifier} LocalVariableType VariableDeclaratorId : Expression ) Statement \n
Run Code Online (Sandbox Code Playgroud)\n

...

\n

的类型Expression必须是原始类型的子类型Iterable或数组类型(\xc2\xa710.1)的子类型,否则会出现编译时错误。

\n
\n

AString不是数组类型的子类型Iterable或数组类型。因此....编译错误。

\n
\n

正如 @shmosel 提到的,您可以迭代char[]返回的s.toCharArray(). 但是,这将创建一个新数组1

\n

1 - ...除非你的 JVM JIT 编译器足够聪明,可以优化它。我认为他们目前无法做到这一点,并且我不会打赌 Java 设计者想要实现这种优化。

\n