我正在尝试
String s = "test string";
for(Character c: s) {
}
编译器报告错误。我想知道为什么我不能在字符串中使用foreach吗?
答案 0 :(得分:3)
原因在JLS 14.14.2中列出:
EnhancedForStatement: for ( {VariableModifier} LocalVariableType VariableDeclaratorId : Expression ) Statement
...
Expression
的类型必须是原始类型Iterable
的子类型或数组类型(第10.1节),否则会发生编译时错误。
String
不是Iterable
的子类型或数组类型。因此....编译错误。
如@shmosel所述,您可以迭代char[]
返回的s.toCharArray[]
。但是,这将创建一个新的数组 1 。
1-...除非您的JVM JIT编译器足够聪明以至于对其进行优化。我认为他们目前无法做到这一点,并且我不会押注希望实现该优化的Java设计人员。